Я знаю, что могу отправить как base64, но это не то, что я хочу. Я хочу имитировать FormData, а не изменять код на стороне сервера.

жем использовать.formData() изBody Mixin, чтобы вернутьFormData представление данных вХром (Chrome) 60+ и Firefox 39+

Соответствующие спецификации:

7.2 Multipart Content-TypeВозвращаемые значения из форм: multipart / form-data

описки

Разъяснение алгоритма данных пакета Body с байтами, FormData и MIME-типом multipart / form-data # 392Документирование фактической обработки загрузки файла поля формы multipart / form-data # 3040

Связанный

Многочастный HTTP-ответКак загрузить файлы в Web Workers, когда FormData не определена

Как вручную создатьmultipart/form-data использование JavaScript на клиенте и на сервере для обслуживанияmultipart/form-data в ответ?

 Kaiido08 нояб. 2017 г., 07:30
 Kaiido08 нояб. 2017 г., 06:26
Body.formData() Метод предназначен для использования ServiceWorkers, который будет перехватывать запрос пользователя до его отправки на сервер. Чтобы создать FormData вручную, вы можете использовать конструктор FormData.
 Kaiido08 нояб. 2017 г., 08:29
Да, «Я знаю, что MDN управляется пользователями» и содержит ошибки =>developer.mozilla.org/en-US/docs/Web/API/... developer.mozilla.org/en-US/docs/Web/API/Request/mode$history
 guest27131408 нояб. 2017 г., 07:21
@Kaiido Как ты сделал вывод, чтоBody.formData() предназначен для использования только в определенных целях? Пытаюсь построитьmultipart/form-data строка вручную, с нуля, без использованияFormData().
 guest27131408 нояб. 2017 г., 07:31
@Kaiido Ваш источник только документ MDN?

Ответы на вопрос(1)

Вы можете создатьmultipart/form-data вручную с XMLHttpRequest, как в этом примере.

function multiPost(method, url, formHash){
    var boundary = "nVenJ7H4puv"
    var body = ""
    for(var key in formHash){
        body += "--" + boundary
             + "\r\nContent-Disposition: form-data; name=" + formHash[key].name
             + "\r\nContent-type: " + formHash[key].type
             + "\r\n\r\n" + formHash[key].value + "\r\n"
    }
    body += "--" + boundary + "--\r\n"

    var xml = new XMLHttpRequest();
    xml.open(method, url)
    xml.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary)
    xml.setRequestHeader("Content-Length", body.length)
    xml.send(body)
}
 sapics09 нояб. 2017 г., 15:32
Да, было бы лучше, если это тип файла.
 sapics09 нояб. 2017 г., 16:17
Вы можете обращаться с файлом аналогичным образом. Если ваш сервер может принять base64, вы можете отправить файл в формате base64 с добавлением телаContent-Transfer-Encoding: base64, Это поможет вамstackoverflow.com/questions/7529159/...
 guest27131409 нояб. 2017 г., 16:23
Код в вашем ответе не обрабатывается<input type="file"> элемент
 guest27131409 нояб. 2017 г., 15:47
Код в ответе не обрабатывает<input type="file" name="abc"> <input type="file" name="abc" multiple>, верный?
 guest27131409 нояб. 2017 г., 15:26
Долженfilename также быть включены в код?

Ваш ответ на вопрос