java后端返回文件流 前端点击获取文件流下载
时间: 2024-11-06 17:15:58 浏览: 49
在Java后端开发中,当你需要将文件作为响应返回给前端用户以便他们下载时,可以创建一个`OutputStream`或`FileInputStream`,并设置适当的`Content-Disposition`头信息来指示浏览器以下载模式处理内容。这里是一个简单的示例:
```java
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
// 假设你有一个File对象代表你要发送的文件
File file = new File("path_to_your_file");
HttpServletResponse response = (HttpServletResponse) request.getServletContext().getResponse();
response.setContentType("application/octet-stream"); // 设置默认的二进制内容类型
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); // 指定文件名
try {
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) { // 逐块读取文件并写入响应流
response.getOutputStream().write(buffer, 0, length);
}
fis.close(); // 关闭文件流
} catch (IOException e) {
e.printStackTrace();
}
// 记得关闭响应连接,释放资源
response.flushBuffer();
response.getWriter().flush();
response.getWriter().close();
```
前端部分,你可以通过AJAX或者普通的HTML `<a>`标签来触发这个下载过程:
```javascript
// 使用fetch API 或 XMLHttpRequest
fetch('/api/download', {
responseType: 'blob'
}).then(response => {
let url = window.URL.createObjectURL(response.blob());
let a = document.createElement('a');
a.href = url;
a.download = file.name;
a.click();
});
// 或者使用a标签
document.getElementById('downloadLink').href = '/api/download';
document.getElementById('downloadLink').download = file.name;
document.getElementById('downloadLink').click();
```
阅读全文