2017-11-20 18 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を使って同じものを実装しようとすると、期待通りに機能しません。クライアントのコードは次のとおりです。

このファイルダウンロード機能は、ファイルをダウンロードするだけで、内容は内部にありません。ダウンロードしたファイルで、私は次のようなものを見ることができました:

[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を実行しているとき、私は本体内のファイル/イメージを見ることができました。 –

関連する問題