javascript - axios 通过后端生成的文件名下载文件
问题描述
我正在使用Axios向我的后端发送POST
请求。
后端生成一个名为testing.xlsx的Excel文件。
我正在尝试做的事情:
使用从后端生成的相同文件名执行此文件,我尝试过Postman,一切正常。
我试过的:
axios.post(`${env.ENDPOINT}reports/sales/customers_statement`, {
customers_id: form_data.customers_id,
from_date: form_data.from_date,
to_date: form_data.to_date,
},{
responseType: 'blob'
}).then((res) => {
const url = window.URL.createObjectURL(new Blob([res.data]));
const link = document.createElement('a');
const file_name = `${new Date().toISOString().slice(0,10)}.xlsx`; // RENAME HERE
link.href = url;
link.setAttribute('download', file_name);
document.body.appendChild(link);
link.click();
resolve(res.data);
}).catch((e) => {
reject(e);
});
这工作正常,但它不会按从服务器生成的文件名下载文件。
换句话说,我想向我的后端发送请求,以通过我的后端已经生成的文件名下载文件,就像我使用 Postman 发送请求时一样。
解决方案
这是因为您将下载属性设置为 file_name 值,该值与返回的文件名服务器不同
const file_name = `${new Date().toISOString().slice(0,10)}.xlsx`;
尝试将上述更改为此
const contentDisposition = data.headers['content-disposition'];
const filename = contentDisposition.match(/filename=(?<filename>[^,;]+);/)[0];
link.setAttribute('download', file_name);
在后端
response.setHeader("Content-disposition", "attachment; filename="+ yourfilenamehere);
推荐阅读
- here-api - HERE Geocoder API 自由格式文本匹配
- sql-server - 如何解决这个问题?无法打开登录请求的数据库“”。登录失败
- python - 如何使水平条形图的布局紧凑?
- java - 坚持如何在一个对象数组中检索按名称搜索的对象的数据
- laravel - Laravel:调用数组上的成员函数传递()
- css - CSS - 往返于某个状态的覆盖转换
- ffmpeg - 使用 libavcodec 读取 .mkv 视频文件
- angular6 - 创建 EmbeddedView 时获取不同的上下文变量
- android - 在我的 webview 上传图片按钮不工作,但在浏览器它工作?
- javascript - 基于鼠标相对于外框滚动内框