У меня есть базовый express
и настроенный клиент, куда я отправляю xml-файл для экспресс-отправки, и после этого экспресс отправляет обратно xml, и я бы использовал blob, чтобы открыть его на другой вкладке (или сохранить):
Express отправляет обратно xml:
//inside express route
res.download("filename.xml");
Код клиента для отправки запроса POST и получения результата:
$.ajax({
type: "POST",
url: "http://localhost:3000/uploadXML",
async: true,
data: formData,
cache: false,
processData: false,
contentType: false,
responseType:"blob",
enctype: 'multipart/form-data',
timeout: 60000
}).done(function(response){
//display the xml using blob
var blob = new Blob([response], {type: 'application/xml'});
var fileURL = URL.createObjectURL(blob);
//display in another tab
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = fileURL;
a.target = '_blank';
a.click();
}
});
};
Но при попытке всегда возвращается следующая ошибкадля отображения BLOB-объекта
This page contains the following errors:
error on line 1 at column 1: Document is empty
response header
, захваченный из отладки Chrome, выглядел нормально:
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0
Connection: keep-alive
Content-Disposition: attachment; filename="file_name_2.xml"
Content-Length: 3639426
Content-Type: application/xml
Date: Tue, 01 Oct 2019 10:50:13 GMT
ETag: W/"378882-16d86f12471"
Last-Modified: Tue, 01 Oct 2019 10:50:13 GMT
X-Powered-By: Express
Заголовок запроса с некоторой проблемой, но XML-файл все-таки достиг сервера
Provisional headers are shown
Accept: */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryeAaPlIkaO82olCLL
Origin: http://localhost:8383
Referer: http://localhost:8383/translationUI/index.html
Sec-Fetch-Mode: cors
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36
Ответ от Chrome также показан в формате xml. Но результат внутри done()
очень странный для меня.
{URL: "http://localhost:8383/translationUI/index.html"
activeElement: null
adoptedStyleSheets: []
alinkColor: ""
all: HTMLAllCollection(32643) [start, legal_numbering_excha …]
anchors: HTMLCollection []
applets: HTMLCollection []
baseURI: "http://localhost:8383/translationUI/index.html"
bgColor: ""
body: null
characterSet: "UTF-8"
charset: "UTF-8"
childElementCount: 1
childNodes: NodeList ...//There is more}
Что я делаю не так?