1、在servlet中实现文件的下载
public class OpenFileAction extends Action {
private final String ENCODING= "utf-8";
private final String CONTENT_TYPE = "text/plain;charset=utf-8";
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//设置字符编码
request.setCharacterEncoding(ENCODING);
//获取文件的名字
String fileName = request.getParameter("docName");
if(fileName == null || fileName.trim().equals("")){
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("The file which you specify is not exists!!");
out.close();
}else{//file exists
//下载文件的完整路径名
String filePath = request.getSession().getServletContext().getRealPath("/workflow/upload");
String fullFilename = filePath + "\\" + fileName;
System.err.println("下载的文件 = " + fullFilename);
//根据文件的类型设置response的contentType属性
String contentType = request.getSession().getServletContext().getMimeType(fullFilename);
if(contentType == null){
contentType = "application/octet-stream";
}
response.setContentType(contentType);
//设置response的头信息
response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"),"ISO_8859_1"));
//文件的输入输出流
InputStream is = null;
OutputStream os = null;
try{
is = new BufferedInputStream(new FileInputStream(fullFilename));
//定义输出的字节流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//response输出流
os = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[1024*4];
int length = 0;
while((length = is.read(buffer, 0, buffer.length)) != -1){
baos.write(buffer, 0, length);
}
os.write(baos.toByteArray());
}catch(Exception ex){
ex.printStackTrace();
}finally{
is.close();
os.close();
}
}
return null;
}
}
个人学习,欢迎参考