1.jsp页面
<a href="fileDownload?filePath=images/你好啊.txt">点击下载</a>
2.DownloadAction.java
3.struts.xml
4.解决中文乱码的第二种方法
在方法中
HttpServletResponse response=ServletActionContext.getResponse();
fileName=java.net.URLEncoding.encode(fileName,"UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
xml中就不用写那条param了
<a href="fileDownload?filePath=images/你好啊.txt">点击下载</a>
2.DownloadAction.java
public Class DownloadAction extends ActionSupport{
private String filePath;//文件路径
private String fileName;//文件名
public InputStream getTargetFile() throws Exception{
HttpServletRequest request=ServletActionContext.getRequest();
filePath=request.getParameter("filePath");
filePath=new String(filePath.getBytes("ISO-8859-0"),"UTF-8");//字节流转化解决后台接受乱码问题
fileName=filePath.substring(filePath.lastIndexof("/"));
fileName=java.net.URLEncoding.encode(fileName,"UTF-8");//转化乱码解决下载的时候提示文件名乱码问题
return ServletActionContext.getServletContext.getResourceAsStream(filePath);
}
}
3.struts.xml
<action name="fileDownload" class="..">
<result name="success" type="stream">
<param name="contentType">text/plain</param> //如果是text/plain表示纯文本,text/xml表示xml image/gif image/jepg表示图片
<param name="inputName">targetFile</param> //这里取值是去action中的get方法后面的把第一个字符改成小写,如getTargetFile()这里就是targetFile
<param name="contentDisposition">attachment;filename="${fileName}"</param>
//文件下载的处理方式,一种是inline一种是attachment,inline是内联,默认在浏览器打开,attachment是附件默认的点击保存
<param name="bufferSize">4069</param>
//设置缓冲
</result>
</action>
4.解决中文乱码的第二种方法
在方法中
HttpServletResponse response=ServletActionContext.getResponse();
fileName=java.net.URLEncoding.encode(fileName,"UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+fileName);
xml中就不用写那条param了