访问接口预览文件,使用location.href或者window.open访问java接口返回文件流,如何设置改文件的文件名
时间: 2023-11-27 17:49:13 浏览: 76
可以通过设置 HTTP 响应头来指定下载文件的文件名,具体做法如下:
1. 在后端接口中设置文件名
在后端接口中,可以通过设置 HTTP 响应头 `Content-Disposition` 来指定下载文件的文件名。代码示例如下:
```java
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void downloadFile(HttpServletResponse response) throws IOException {
// 读取文件内容
InputStream inputStream = new FileInputStream("/path/to/file");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
// 设置 HTTP 响应头
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=filename.ext");
// 输出文件内容
OutputStream outputStream = response.getOutputStream();
outputStream.write(buffer);
outputStream.flush();
outputStream.close();
}
```
在上述代码中,`Content-Disposition` 头的值为 `attachment;filename=filename.ext`,其中 `filename` 参数指定了下载的文件名。
2. 在前端代码中获取文件名
在前端代码中,可以通过 XMLHttpRequest 的 `getResponseHeader` 方法来获取响应头中的文件名。代码示例如下:
```javascript
var xhr = new XMLHttpRequest();
xhr.open('GET', '/api/download');
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status === 200) {
// 获取文件名
var header = xhr.getResponseHeader('Content-Disposition');
var filename = header.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/)[1];
// 创建 a 标签并下载文件
var a = document.createElement('a');
a.href = window.URL.createObjectURL(xhr.response);
a.download = decodeURIComponent(filename.trim());
a.click();
}
};
xhr.send();
```
在上述代码中,通过正则表达式从响应头中获取文件名,并将其设置为下载链接的文件名。
阅读全文