【发布时间】:2018-01-22 04:46:37
【问题描述】:
我有 Web API,可将文件存储为字节流。响应已被提取并保存在状态中,但现在我想从我的反应应用程序 onClick 按钮下载文件。我这样做如下:
downloadContract( binaryData ) {
const file = new Blob([binaryData], { type: 'application/pdf' });
const fileURL = URL.createObjectURL(file);
window.open(fileURL);
}
调试后正确获取流,但下载文件会产生错误: 加载 PDF 文档时出错。
更新:
使用此源调用新端点:
callLoadContract: {
remote( state, id, contractId ) {
const url = `${base}/vendor/${id}/${contractId }`;
return $http.instance.api.get( url, id, contractId);
},
success: Actions.contractLoaded,
error: Actions.fail
}
处理响应:
loadContract({id, contractId}) {
this.getInstance().callLoadContract( id, contractId );
}
contractLoaded( response ) {
if (response && response.data) {
console.log(response);
const file = new Blob([response.data], { type: 'application/pdf' });
const fileURL = URL.createObjectURL(file);
window.open(fileURL);
}
}
同样的错误。
【问题讨论】:
-
哪种响应类型正在接收您的 JS 代码,arraybuffer 还是 blob?
-
你为什么不从后端
/api/download?fileId=XXXX提供它? -
我获取的 JSON 对象有几个文档。它们是 blob 形式,我在一个 GET 中获取它们,然后用户应该选择查看哪一个。 @CarlosDelgado
-
@dinchev 多个文件在同一个实体中
-
@user1912404,您所说的在概念上是错误的,JSON 字符串中的 blob :v ?您能否详细解释一下您的问题以及是否有可能的服务器端代码?
标签: javascript reactjs pdf reactjs-flux