qq_37610818 2017-05-26 12:31 采纳率: 0%
浏览 816

各位大神,问下为什么我Struts2写下载文件本地测试是好的,但项目发布后,下载文件是乱码的

代码:
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();
}
}

  • 写回答

3条回答 默认 最新

  • ChaseDreamBoy 2017-05-26 17:49
    关注

    可能是没写编码格式吧

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料