使用servlet完毕单文件下载和批量文件下载。批量下载的原理是先将文件打包成zip , 然后再下载。
之前也转载过一篇文件下载的博客,地址:http://blog.****.net/ch717828/article/details/42809999
这篇的demo要更简单一些,须要深入了解更參数含义的能够看第一篇博客
单文件下载:
<a href="servlet/SmartDownLoadFile? filename=gui.jpg">附件</a>
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; 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 SmartDownLoadFile extends HttpServlet { /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String path = getServletContext().getRealPath("/");
String filename = request.getParameter("filename");
File file = new File(path + filename); /*下载文件*/
if(file.exists()){
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
InputStream inputStream = new FileInputStream(file);
ServletOutputStream ouputStream = response.getOutputStream();
try{
byte b[] = new byte[1024];
int n ;
while((n = inputStream.read(b)) != -1){
ouputStream.write(b,0,n);
}
}finally
{
ouputStream.close();
inputStream.close();
}
}
else
{
System.out.println("文件不存在");
}
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req,resp);
} }
文件批量下载:
<form action="servlet/BatchDownloadServlet" method="post">
<input type="checkbox" name="filename" value="gui.jpg" />Image
<input type="checkbox" name="filename" value="gui2.jpg" />Image2
<input type="checkbox" name="filename" value="gui3.jpg" />Image3<br>
<input type="submit" value="下载">
</form>
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class BatchDownloadServlet extends HttpServlet { /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;filename=test.zip"); //filename參数指定下载的文件名称
String path = getServletContext().getRealPath("/");
/*将要下载的文件打包成zip再下载*/
String[] filenames = request.getParameterValues("filename"); //获取要请求下载的文件名称
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
for(String filename : filenames){
File file = new File(path + filename);
zos.putNextEntry(new ZipEntry(filename));
FileInputStream fis = new FileInputStream(file);
try
{
byte b[] = new byte[1024];
int n = 0;
while((n = fis.read(b)) != -1){
zos.write(b, 0, n);
}
}finally
{
zos.flush();
fis.close();
}
}
zos.flush();
zos.close(); } }
完整Demo:http://download.****.net/detail/ch717828/8837101