2017-12-07 15 views
0

서버에서 strem 파일을 처리하기위한 전역 솔루션을 찾으려고합니다.서버에서 스트림 처리 및 브라우저에 파일 표시

내 응답 객체는 각 HTTP 응답을이다

내 목적은 이미지/문서 등

이미지를 @ # $ ...의 긴 문자열이고 문서가 JSON을

I 있습니다에 대한 전혀 다른 _body있다 웹을 통해 솔루션을 찾고,이 구현있어 봤는데 :

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

이 코드는 octet-stream을,745의 콘텐츠 형식을 가진 파일을 다운로드하지만 다른 모든 파일은 브라우저에 표시되지 않습니다.

내 주요 목표는 URL에 스트림을 반환하는 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()); 

각 mimeType를의 특별한 처리를위한 코드입니다

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