代码:
public void downloadFile() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
try {
tuser = this.getUser();
if(tuser == null) {
//用户未登录
return;
}
if(fileUrl == null || "".equals(fileUrl)){
//下载的文件为空
//request.setAttribute("message", "下载的文件为空!!");
request.getRequestDispatcher("/pages/taskManager/message.html").forward(request, response);
return;
}
File serverFile = new File(fileUrl);
String orientName = serverFile.getName();
String fileName = orientName.split("\%\$\%")[0];
String fileSuffix = orientName.split("\.")[1];
String realname = fileName + "." + fileSuffix;
String realPathFileString = fileUrl.substring(fileUrl.indexOf("/upload"));
//获得文件所在服务器的物理地址
String fileSaveRootPath = this.getServletContext().getRealPath(realPathFileString);
//得到要下载的文件
File file = new File(fileSaveRootPath);
// 如果文件不存在
if (!file.exists()) {
//request.setAttribute("message", "您要下载的资源已被删除!!");
request.getRequestDispatcher("/pages/taskManager/message.html").forward(request, response);
return;
}
// 设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));
// 读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(fileSaveRootPath);
// 创建输出流
OutputStream out = response.getOutputStream();
// 创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
out.flush();
// 关闭文件输入流
in.close();
// 关闭输出流
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
各位大神,问下为什么我Struts2写下载文件本地测试是好的,但项目发布后,下载文件是乱码的
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-