文件下载在项目中经常会使用。
最简单的文件下载,只要提供一个链接地址就能够进行下载,比如在eclipse官方网站下载eclipse时就是
通过这样的方式进行下载。
第二种方式可以通过HttpServletResponse进行下载,通过文件读写的方式把要下载的文件写到
HttpServletResponse的输出流中,完成文件下载。
servlet代码
package com.guchao.test.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -135694745600205819L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
File f = new File("d:\\role.txt");
//注意设置的文件类型要与文件对应
resp.setContentType("text/plain,charset=UTF-8");
resp.setHeader("Content-Disposition", "attachment;filename="+f.getName());
FileInputStream fis = new FileInputStream(f);
ServletOutputStream os = resp.getOutputStream();
byte[] buffer = new byte[1024];
int length = 0;
while((length=fis.read(buffer)) != -1){
os.write(buffer, 0, length);
os.flush();
}
fis.close();
os.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}
同样可以使用Struts2进行文件下载,本人没有看过Struts2关于文件下载的源码,但个人觉得可能会和第
二种方式类似。Struts2文件下载如下:
Action类
package com.guchao.struts2.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
public class FileDownloadAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 7728770879895650308L;
private InputStream downloadInputStream;
@Override
public String execute() throws Exception {
File f = new File("d:\\role.txt");
downloadInputStream = new FileInputStream(f);
return "idownload";
}
public InputStream getDownloadInputStream() {
return downloadInputStream;
}
}
struts.xml
<action name="fileDownload" class="com.guchao.struts2.action.FileDownloadAction"> <result name="idownload" type="stream"> <param name="contentType">text/plain</param> <param name="bufferSize">1024</param> <param name="contentDisposition">attachment;filename=role.txt</param> <param name="inputName">downloadInputStream</param> </result> </action>
JSP页面
<a href="<%=basePath %>fileDownload">download file by Struts2</a><br/>
这样就完成了Struts2的文件下载