ReactJS image / pdf文件下载不起作用

时间:2017-11-20 17:44:48

标签: reactjs file download response pyramid

我想下载任何格式的文件即。 pdf,jpeg,png,xlsx,csv等。使用金字塔框架的后端下载API正在发送FileResponse,如下所示:

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回复​​。所以我不认为服务器端代码有任何问题。我怎样才能在客户端处理它?<​​/ p>

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您只是将用户重定向到链接到文件,它会适合您吗?浏览器将自动处理并下载它。

答案 1 :(得分:0)

问题出在fileDownload函数中,您不在此处发布。目前尚不清楚第一个参数应该是什么,但可能不是响应对象。可能你至少需要将身体从反应中拉出来并保存!响应主体可以转换为可以工作的缓冲区对象(同样取决于fileDownload期望的内容):

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