81,092
社区成员
发帖
与我相关
我的任务
分享
public String download() throws Exception {
uploadFileName="中文.jpg";
downStream = ServletActionContext.getServletContext()
.getResourceAsStream(inputPath);
return SUCCESS;
}
<action name="download" class="upload.DownloadAction" method="download">
<!-- 指定被下载资源的位置 -->
<param name="inputPath">\download\中文.jpg</param>
<!-- 配置结果类型为stream的结果 -->
<result name="success" type="stream">
<!-- 指定返回下载文件的InputStream -->
<param name="inputName">downStream</param>
<!-- 指定下载文件的文件类型 -->
<param name="contentType">image/jpg</param>
<param name="contentDisposition">attachment;filename=${uploadFileName}</param>
<!-- 指定下载文件的缓冲大小 -->
<param name="bufferSize">4096</param>
</result>
<result name="input">/upload.jsp
</result>
</action>
页面
<a href="download.action">下载包含中文文件名的文件</a>
public String executeCommandUDownload(ActionContext context)throws Exception{
HttpServletResponse response = context.getResponse();
response.setCharacterEncoding("UTF-8");
boolean isOnLine = false;
String fileName = context.getRequest().getParameter("fileName");
Connection con = null;
HttpServletRequest request = context.getRequest();
String filePath = null;
BufferedInputStream buffer=null;
OutputStream out=null;
try
{
con = this.getConnection(context);
if("".equals(fileName) || fileName == null){
FileInfoBean bean = new FileInfoBean();
fileName = bean.findName(con, id);
}
File f = new File(filePath);
//检查该文件是否存在
if(!f.exists()){
response.sendError(404,"File not found!");
return "File not found!";
}
buffer = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); //非常重要
if(isOnLine){ //在线打开方式
URL u = new URL("file:///"+filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition", "inline; filename="+(f.getName()).getBytes("gbk"));
//文件名应该编码成UTF-8
}
else{ //纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(f.getName(),"UTF-8"));
}
out = response.getOutputStream();
while((len = buffer.read(buf)) >0)
out.write(buf,0,len);
}catch(Throwable e)
{
e.printStackTrace();
}finally
{
try
{
buffer.close();
out.close();
}catch(Throwable e)
{
e.printStackTrace();
}
}
return "";
}
response.setContentType("application/octet-stream");
response.setContentType("application/OCTET-STREAM;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName1);
File file = new File(filePath + fileName);
try {
fis = new FileInputStream(file);
out = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
out.write(buffer, 0, len);
out.flush();
}
}catch.......
response.setHeader("Content-disposition", "attachment; filename=word.doc");
attachment;这个很重要,没有这个就直接打开了