###Action类
public String download() {
InputStream is = readDocsManager.getOneDoc(parent, name);
HttpServletResponse response = HttpResponseHolder.getResponse();
OutputStream out = null;
try {
//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
//2.设置文件头:最后一个参数是设置下载文件名
response.setHeader("Content-Disposition", "inline;fileName="+new String(name.getBytes(),"ISO8859-1"));
out = response.getOutputStream();
byte[] buf = new byte[1024];
int size = -1;
while ((size = is.read(buf)) != -1) {
out.write(buf, 0, size);
}
response.flushBuffer();
} catch (Exception e) {
logger.error(e.getMessage(),e);
}finally{
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(out);
}
return "download";
}
代码readDocsManager.getOneDoc(parent,name)
是根据路径和名称读取文件,并返回一个InputStream
的对象。
###struts.xml中的配置
<action name="docAction" class="onlineDocsAction">
<result name="download" type="httpheader">
</result>
</action>
注意返回的类型是httpheader
。
###中文转码问题
文件上传下载的时候,请一定要注意中文的转码,否则后台会报FileNotFoundException
的错误。