Изменение имени файла в BlobBuilder для передачи в качестве FormData на XHR - PullRequest
3 голосов
/ 13 декабря 2011

В настоящее время я пытаюсь загрузить ArrayBuffer на сервер (который я не могу изменить), который ожидает файл, который я загружаю в формате multipart / form-data. Сервер извлекает из Content-Disposition части filename, которая будет сохранена, и в Content-type MIME-тип, который будет использоваться при обслуживании файла. В настоящее время я успешно загружаю файл с:

var xhr = new XMLHttpRequest();
var fdata = new FormData();
var bb;

if (WebKitBlobBuilder) {
    bb = new WebKitBlobBuilder();
} else if (MozBlobBuilder) {
    bb = new MozBlobBuilder();
} else if (BlobBuilder) {
    bb = new BlobBuilder();
}

bb.append(obj.array);

fdata.append('file', bb.getBlob("application/octet-stream"));

xhr.open("POST", url, true);
xhr.send(fdata);

Но заголовки отправляются так, как нравится браузеру, например в Chrome:

Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: application/octet-stream;

Я собирался сохранить его во временный файл с помощью FileWriter API, а затем загрузить его, но это не так.

При ответе учитывайте :

  • Сервер нельзя изменить, и я не хочу выбирать другого поставщика сервера.
  • Должно работать как минимум в Firefox и Chrome (мое приложение уже ограничено этими двумя браузерами).

1 Ответ

5 голосов
/ 14 декабря 2011

Просто решил сам, благодаря проблеме с Chromium, указывающей мне на ответ по стандартному черновику w3c XMLHttpRequest . В основном я должен изменить:

fdata.append('file', bb.getBlob("application/octet-stream"));

до:

fdata.append('file', bb.getBlob("application/octet-stream"), obj.filename);

И это дает желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...