2017-11-20 4 views
0

어떤 형식 으로든 파일을 다운로드하고 싶습니다. 피라미드 프레임 워크를 사용하여 백엔드에 PDF, JPEG, PNG, XLSX, CSV 등 다운로드 API는 다음과 같이 FileResponse을 보내는 : 출력으로 파일을주고 예상대로ReactJS 이미지/pdf 파일 다운로드가 작동하지 않습니다.

def delivery_item_download_view(request, *args, **kw): 
    context = request.context 
    item_row = context.item_row 

    if item_row and item_row["deleted_at"] is None: 
     print(request.upload_dir+'/'+item_row["file_name"]+'.'+item_row["file_extension"]) 
     response = FileResponse(
      request.upload_dir+'/'+item_row["file_name"]+'.'+item_row["file_extension"], 
      request=request, 
     ) 
     response.headers["attachment"] = item_row["name"]; 
     return response 

이, 사용하여 실행 POSTMAN 작동합니다. 그러나 ReactJS를 사용하여 구현을 시도했을 때 예상대로 작동하지 않습니다. 내 고객 코드는 다음과 같습니다.

onDownloadItem= (item) => { 
    console.log("item id is:", item.item_id) 
    var apiBaseUrl = "https://dev.incodax.com/api/deliveries_items/"+ item.item_id+ "/download"; 
    fetch(apiBaseUrl, { 
     method: "GET", 
    }).then((res) => { 
     fileDownload(res,item.file_name) 
     console.log(res) 
    }) 
} 

이 파일 다운로드 기능은 단순히 파일을 다운로드하지만 내용은 포함하지 않습니다. 다운로드 한 파일에서 다음과 같이 볼 수 있습니다 :

[object Response] 

서버로부터 200 응답을 받았습니다. 그래서 나는 서버 측 코드에 문제가 있다고 생각하지 않는다. 클라이언트에서 어떻게 처리 할 수 ​​있습니까? 그냥 파일을 사용하는 사용자를 리디렉션하는 경우 사전에

감사

답변

0

는 당신을 맞는 것인가? 브라우저가 자동으로 처리하고 다운로드합니다.

+0

예 나는 그것의 벌금을 것 같아요. –

0

여기에 게시하지 않는 문제는 fileDownload 함수에 있습니다. 첫 번째 매개 변수가 무엇인지 추정 할 수는 없지만 응답 개체가 아닌 것 같습니다. 아마 당신은 응답에서 몸을 당겨 저축 할 필요가있을 것입니다! 응답 본체 (다시는 fileDownload가 기대에 따라 달라집니다) 일 수있는 버퍼 객체로 변환 할 수 있습니다

res.arrayBuffer().then(buffer => { fileDownload(buffer, item.file_name); });

+0

응답을 인쇄 할 때 응답 개체에서 서버의 내용을 볼 수 없습니다. FileResponse 객체가 정확히 무엇을 전송하는지 모르겠습니다. 문서에서 그들은 "디스크에서 정적 파일을 간단하게 제공하는 데 사용할 수있는 응답 객체"를 제공했습니다. 또한 반응 파일 다운로드 구성 요소 인 https://www.npmjs.com/package/react-file-download를 사용하고 있습니다. 그들은 "데이터"가 의미하는 것을 언급하지 않았습니다. 하지만 파일 내용이라고 생각합니다. 내 응답 객체에는 파일의 가장 먼 URL이 있어야한다고 생각합니다. 하지만 그렇지 않습니다. POSTMAN을 실행할 때 본문의 파일/이미지를 볼 수있었습니다. –

관련 문제