而Java后端代码里是有的
Content-Disposition
响应头的:
public static void downloadWithBIO(String fileName, HttpServletResponse response) {
String simpleName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(simpleName, "UTF-8"));
response.setContentLengthLong(file.length());
try (OutputStream os = response.getOutputStream();
FileInputStream fis = new FileInputStream(new File(fileName));
BufferedOutputStream bos = new BufferedOutputStream(os)) {
byte[] bytes = new byte[4096];
while (fis.read(bytes) != -1) {
bos.write(bytes);
os.flush();
} catch (IOException e) {
throw new BusinessRuntimeException(e);
而且查看网络请求也是包含这个响应头的,所以只能是axios把这些响应头去除了。
经查询axios文档发现只要将后端响应时再加一个响应头,axios就能放行指定的响应头
response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
后端调整后,前端通过响应头中取响应头就可以了
使用button代替a标签实现文件下载文件下载方法使用axios获取blob创建URL对象并点击`a`标签`button`点击事件触发
文件下载方法
如果从后台服务中可以获取文件的下载url,那么在页面中要实现文件下载,直接使用<a> 标签
<a href="url">文件下载</a>
但是这种方法下载的文件名称是一串字符串,并不是文件本身的名字。为了实现所下...
content-disposition:”attachment;filename=total.xls”
content-type:”application/x-download;charset=utf-8”
axios请求的responseTy...
做测试一般只需要创建 "OS X" 的 "Command Line Tool" 即可。
NSString * urlString = @"https://www.baidu.com/img/2016_6_9logo_e5230b7f39f078d288a313971a7fea56.gif";
1、pathComponent
根据MDN文档:Access-Control-Expose-Headers
默认情况下,header只有六种 simple response headers (简单响应首部)可以暴露给外部:
Cache-Control
Content-Language
Conten..
通过检查上传数据的Content-Type是multipart/form-data;跟网上查的一致;并无异样。
在网上找到说是axios的配置问题,导致上传的数据被序列化导致为null的;引致后台报错为空指针错误。通过对axios配置文件的检查也发现axios对Formdata的数据有进行判断,并无对FormData数据进行序列化。
那问题来了。既然数据没有被序列化,也到达了后台...
前端vue axios获取服务端返回的文件名并根据文件流生成文件下载
const fileExport = (data) => {
// 创建当前时间字符串,生成文件名称时使用
// const time = +new Date()
let dis = response.headers['content-disposition']
let fileName = fileName = decodeURIComponent(dis.split('attachment;filename=')
url: 'your_download_url',
responseType: 'blob', // 以流的方式接收响应数据
onDownloadProgress: (progressEvent) => {
console.log('下载进度:' + progressEvent.loaded / progressEvent.total);
console.log('下载速度:' + progressEvent.loaded / (progressEvent.elapsedTime / 1000) / 1024 / 1024 + 'MB/s');
}).then(res => {
// 文件下载成功后的处理
}).catch(error => {
// 文件下载失败后的处理
请注意,在使用axios下载文件时,需设置responseType为‘blob’,并使用.then()来处理响应的数据。
qq_31578483:
Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)
东北小狐狸-Hellxz: