2016-11-22 18 views
-1

javascriptを使用しています。 xhrリクエストをサーバーに送信していますので、マルチパートデータを含むxhrレスポンスを受け取り、2番目の部分にはダウンロード可能なファイル(pdf、png、office documents)が含まれています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 

私はPKから始まるバイナリデータを抽出したいと思います。直後、それは「PK」から始めるべきothehrwise

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は、バイナリデータの初めのインデックスを持つ必要があります。ここに

は、私が書いたコードですコンテンツタイプ行

   //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 
        }); 

どうすればいいですか?

+0

あなたが実際に多くの場合、サーバーに送信されているマルチパート体が何であるかをダウンロードしていますか? – Endless

答えて

0

私は右filestart式が見つかりました:

var fileStart = holder.indexOf('Content-type: ', holder.indexOf('Content-disposition: ')) + type.length +18; 
関連する問題