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
    关注

    可能是没写编码格式吧

    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看