为什么非form表单的post方式 下载不了文件

  1. 使用form表单method="POST"可以下载文件
  2. 使用非form表单提交的post请求下载文件 解析不了 是一堆乱码
  3. 有解决方法没?
阅读 4.6k
2 个回答

这么长时间了 自己来回答一下吧。
这个问题其实是针对于fetch请求回的结果不能下载,而form表单提交可以自动下载。这里要解决的是fetch要如何自动下载。

有个对象叫做Blob对象; 而fetch请求的是Response对象我们通常使用的是res.json(),这个方法返回的是一个被解析为JSON格式的Promise对象;这里我们需要一个Blob对象,使用res.blob()方法可以获取。

使用URL的createObjectURLrevokeObjectURL分别用于创建Blob对象和允许平台在合适的时机进行垃圾收集。具体的代码如下:

function downloadBlobFile(data, fileName) {
    let a = document.createElement('a');
    const url = URL.createObjectURL(data);
    a.href = url;
    // 文件名称
    a.download = fileName;
    a.click();
    URL.revokeObjectURL(url);
    a = null
}

最后贴一个Stack Overflow相似的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题