2017-12-07 8 views
0

サーバーからstremファイルを処理するためのグローバルな解決策を探しています。サーバーからのストリームを処理し、ブラウザにファイルを表示する

マイレスポンスオブジェクトは、角HTTPレスポンスである

私のオブジェクトは、画像/ドキュメントなど

の画像のdiffernetの_bodyは、@#$ ..の長い文字列でいるとドキュメントは、I JSON

ですVE「は、ウェブ上の解決策を探していて、これを実装するようになったされて:

let contentType = resData.headers.get("Content-Type"); 
let blob = new Blob([resData.arrayBuffer()], {type: contentType}); 
let url = window.URL.createObjectURL(blob); 
window.open('url: ', url); 

このコードは、オクテットストリームのコンテンツ・タイプを持つファイルをダウンロード他のすべてのファイルはブラウザに表示されません。

私の主な目標は、ストリームを返すAPIをURLに入れて、ブラウザがそれを処理する方法を知っている場合(ブラウザで表示される画像、ブラウザでサポートされないファイル自動ダウンロードなど)

答えて

0

これはリクエストのコードです。

return Observable.create(observer => { 
      let xhr = new XMLHttpRequest(); 
      xhr.open(Object.keys(RequestMethod).find(k => RequestMethod[k] === url.method), url.url, true); 
      const shift = 
      xhr.setRequestHeader('Content-type', 'application/json'); 

      xhr.responseType = (Object.keys(ResponseContentType).find(k => ResponseContentType[k] === url.responseType)).toLocaleLowerCase(); 
      xhr.onreadystatechange = function() { 
       if (xhr.readyState === 4) { 
        if (xhr.status === 200) { 
         let blob = new Blob([xhr.response], {type: body.MimeType}); 
         observer.next({blob: blob, fileName: body.FileName}); 
         observer.complete(); 
        } else { 
         observer.error(xhr.response); 
        } 
       } 
      } 

      xhr.send(url.getBody()); 

これは、各MIMEタイプ

handleAttachmentItem(resData) { 
    let blob = resData.blob; 
    const fileName = resData.fileName; 
    if (blob.type.includes('image')) { 
     let b64Response = window.URL.createObjectURL(blob); 
     let outputImg = document.createElement('img'); 
     outputImg.src = b64Response; 
     let w = window.open(); 
     w.document.write('<html><head><title>Preview</title><body style="background: #0e0e0e">'); 
     w.document.write(outputImg.outerHTML); 
    } else if (blob.type.includes('text')) { 
     let url = window.URL.createObjectURL(blob); 
     window.open(url); 
    } else { 
     let a = document.createElement("a"); 
     document.body.appendChild(a); 
     let url = window.URL.createObjectURL(blob); 
     a.href = url; 
     a.download = fileName; 
     a.click(); 
     window.URL.revokeObjectURL(url); 
    } 
} 
の特別な処理のためのコードであります
関連する問題