代码:
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();
}
}
可能是没写编码格式吧
1.
show variables like 'character_set_database'
alter table <表名> character set utf8;
2.
?useUnicode=true&characterEncoding=utf8
3.检查项目工作区编码
4.
ServletActionContext.getRequest().setCharacterEncoding("GBK");
5.
java.net.URLDecoder.decode(乱码,"UTF-8");