Использование javascript. Я отправляю xhr запрос на сервер, поэтому получаю ответ xhr, который содержит многостраничные данные, вторая часть содержит загружаемый файл (pdf, png, офисные документы)Как читать двоичные данные из ответа xhr
в xhr.response Я получил это:
--_NextPart_000_0002_01C3E1CC.3BB37320
Content-type: application/xml; charset=UTF-8
<ns0:sendAttachmentOutput xmlns:ns0="http://****/webservices/definition/BDS/AttachmentFileStorage/sendAttachmentOutput/1">
<ns0:msgCode>BDS0000</ns0:msgCode>
<ns0:msgLibelle>Pièce jointe envoyée</ns0:msgLibelle>
</ns0:sendAttachmentOutput>
--_NextPart_000_0002_01C3E1CC.3BB37320
Content-disposition: attachment; filename="testsza.xlsx"
Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
PK ! |lؖl [Content_Types].xml ( ]Kðǯ��4٦Ɉ珈Ω֦!'ܛ࠷4zԐ杷}Ҵ఼jLքZق��`KǴݕ�՟ҌôJg [email protected]]^ȫّÕ1̡҈݇K3Ջ͌��̲.g ޞͨݍ`c[
6>@%&fϫ`ѥ��̠ӻċʔ,κ擯8uƚ̵ǫàÓ]��Ԃl"C|֍aȕ.͟ݛԮ˴ ʕˆv# ֠ѱ<ͼҚi蟙ŝ_>ң�����$I爁`\3ж#z̹ցիԔgĮѤ8ϔ(N߅]d՝٧!Qþ4ڮࠞҒ鵃oןڼS:݅˗ѧ ��PK ! ֕0#��L _rels/.rels ( ̒ЎðǯH݃弪nHe܌HۡT$ͣ[email protected]��Êcܑ��[߮窔b/Nú(Aѳb{تx͟Vb"giǚΜaWޞl_xĔܢػȲˋڔ��OѰQˡhѓɥܔ彆ߞP-<ցj{ʾ״Mox/羢؎̀ޓ;̶愦ʏۨۂ̉Õʻ"cަۜO��q"KʐHߊ[email protected]쫁.ࠨʸގ<⧄⎤T_ ��PK ! މ�� ԃ xl/_rels/workbook.xml.rels ( ܓЪðǯýđ}qӮeԺAЛ��㑄6'o?ԃۀɮWä��ȽᨯėjޕХ)ԥۨ̚<àֶҝӨ`@ÃqؿĎs$%Ǚ襤Ӡϩqmݔ.��궹֍ʼMײ��ƩΕð̶ NÏ
--_NextPart_000_0002_01C3E1CC.3BB37320
Я хочу извлечь двоичные данные, которые начинаются с ПК.
вот код, который я написал:
xhr.responseType = "arraybuffer";
xhr.onload = function (e) {
var arraybuffer = xhr.response;
var fileArray = new Uint8Array(arraybuffer);
var type = xhr.getResponseHeader('Content-Type');
var boundary;
if (type.indexOf('boundary') != -1) {
boundary = type.substring(type.indexOf('boundary') + 9);
}
var temp = holder.split('--' + boundary);
var parts = [];
//loop through array to remove empty parts
for (var i = 0; i < temp.length; i++) {
if (temp[i] != "") {
parts.push(temp[i]);
}
}
var type = parts[2].substring(parts[2].lastIndexOf('Content-type: ') + 14, parts[2].indexOf('\n', parts[2].lastIndexOf('Content-type: ')) - 1);
var filename = parts[2].substring(parts[2].indexOf('Content-disposition: attachment; filename="') + 43, parts[2].indexOf('\n', parts[2].indexOf('Content-disposition: attachment; filename="')) - 2);
var lastBoundary = holder.lastIndexOf(boundary) - 4;
//PARSE SECOND PART
//var fileStart = holder.indexOf('Content-disposition: attachment; filename="') + 43 + filename.length + 5;
// ***** fileStart должен иметь индекс начала двоичных данных, othehrwise он должен начинаться с «ПК», только после того, как линия содержимого
//start point to the end of the array
var file = fileArray.buffer.slice(fileStart, lastBoundary);
if (!file || 0 === file.byteLength) {
_displayError("Pdf introuvable");
}
else if (type == "text/html;charset=UTF-8") {
_displayError("Erreur de téléchargement du pdf. Veuillez contacter l'administrateur.");
}
else {
var blob = new Blob([file],
{
type: type
});
Как это сделать?
вы скачиваете, что на самом деле многочастному тело, которое часто посылаются на сервер? – Endless