1.前端
window.open(encodeURI("/xxx/downloadPackage?filePath="+data.zipPath));
2.后端
我这里中文是这行代码处理的
String name = URLEncoder.encode(f.getName(), “utf-8”);
public void downloadPackage(String filePath,HttpServletRequest request, HttpServletResponse response) {
BufferedInputStream br=null;
OutputStream out=null;
try {
File f = new File(filePath);
if (!f.exists()) {
response.sendError(404, "File not found!");
return;
}
br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
response.setContentType("application/x-msdownload;charset=utf-8");
//设置编码格式
String name = URLEncoder.encode(f.getName(), "utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" + name);
out= response.getOutputStream();
while ((len = br.read(buf)) > 0){
out.write(buf, 0, len);
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
br.close();
out.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
本文介绍了一种前后端结合的文件下载方案。前端通过window.open结合encodeURI实现文件下载请求的发送;后端则通过读取文件内容并使用BufferedInputStream与OutputStream进行流式传输,同时利用URLEncoder.encode确保中文文件名正确显示。
1万+

被折叠的 条评论
为什么被折叠?



