У меня проблема с отправкой файла (часть запроса в формате данных формы).Как использовать xhr.overrideMimeType в Chrome/IE Edge?
Вопрос, кажется, исходя из того факта, что только в Chrome для Linux файл (который является CVS файл с расширением .csv и в основном только текст) отправляется с MimeType (Content-Type в запросе тела) Content-Type: применение/октет-поток
Итак, я пытаюсь переопределить MIMETYPE, чтобы соответствовать тем же посланный Chrome на Linux, который текст/csv.
Однако MimeType, по-видимому, не перекрываться и до сих пор, как отправить октета-поток.
Мой код:
let xhr = new XMLHttpRequest();
let form = new FormData();
form.append('file', file, file.name); // the file is loaded correctly
form.append('payload', JSON.stringify(data)); // data is just a JSON object
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
// we arrive here both on Debian and Windows 10
}
}
xhr.upload.onerror = function() { .... } // no error
xhr.open('POST', 'http://<my_url>', true);
console.log(file.type);
xhr.overrideMimeType("text/csv");
xhr.send(form);
Несколько примечаний:
- console.log (file.type) фактически печатает "текст-CSV", но только в Chrome для Linux (Debian). в других случаях (любой другой браузер или платформа) ничего не напечатанных
- учитывая предыдущий пункт, то мне кажется ясным по какой-либо причине любой другой браузер/платформа не может распознать тип файла, поэтому файл посылается как октетов-поток (общий двоичный файл)
спасибо Роб. так что в основном, я беру переменную «файл» (которая является блобом), я использую ее для создания нового блоба с другим типом? – dragonmnl
неважно, это сработало! , но можете ли вы пояснить, почему на самом деле нужно использовать overrideMimeType? – dragonmnl
@ dragonmnl, например. 'xhr.responseXML' устанавливается только в том случае, если ответ представляет собой XML-документ. Если вы ожидаете ответа XML, но сервер неправильно настроил MIME-тип ответа, вы можете переопределить MIME-тип, чтобы убедиться, что браузер пытается проанализировать ответ как XML, используя 'xhr.overrideMimeType ('приложение/XML') ' –