Java代码实现文件下载

it2022-05-09  22

昨天晚上写了一篇文件上传的,今天上午把文件下载弄了一下,还是commons中的包

commons-fileupload.jar、commons-io.jar,下载位置就不说了,apache网站上找

这是一个web工程,下面有个截图

仅供参考,下面是index.jsp代码

View Code <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><% response.sendRedirect("showfile.jspx");%>

showfile.jsp

View Code <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>文件下载</title></head><body> 请选择您要下载的文件:<br/><c:forEach items="${fileList}" var="fileName"> <a href="download.jspx?filename=${fileName }">${fileName }</a><br/> </c:forEach> </body></html>

web.xml,这个没什么好看的,大家新建servlet时会自动完成web.xml中内容,其实就是请求servlet路径

View Code <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name></display-name><servlet><servlet-name>ShowFileServlet</servlet-name><servlet-class>ShowFileServlet</servlet-class></servlet><servlet><servlet-name>DownLoadServlet</servlet-name><servlet-class>DownLoadServlet</servlet-class></servlet><servlet-mapping><servlet-name>ShowFileServlet</servlet-name><url-pattern>/showfile.jspx</url-pattern></servlet-mapping><servlet-mapping><servlet-name>DownLoadServlet</servlet-name><url-pattern>/download.jspx</url-pattern></servlet-mapping> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

好了,下面是servlet了

ShowFileServlet.java

View Code import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ShowFileServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { String path="D:/file";//下载资源位置 List<String> fileList = new ArrayList<String>();//声明集合存放目录下所有文件的文件名 File folder = new File(path);//判断文件夹是否存在并且是否是一个目录 if(folder.exists()&&folder.isDirectory()){//获得目录中所有文件及目录 File[] files = folder.listFiles();for(File file:files){//如果是文件 if(file.isFile()){//将文件名放入集合 fileList.add(file.getName()); } } } request.setAttribute("fileList", fileList); request.getRequestDispatcher("showfile.jsp").forward(request, response); }public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response); }}

DownLoadServlet.java

View Code import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.URLEncoder;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 DownLoadServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { String path="D:/file";//资源位置 String fileName1 = request.getParameter("filename"); String fileName = new String(fileName1.getBytes("ISO-8859-1"),"utf-8"); File file = new File(path+"/"+fileName);//下载资源文件//文件存在 if(file.exists()){//设置响应类型及响应头 System.out.println(fileName); response.setContentType("application/x-msdownload");//防止输出文件名乱码以下两种均可//response.setHeader( "Content-Disposition", "attachment;filename=\"" + new String( fileName.getBytes("gb2312"), "ISO8859-1" )+"\""); response.addHeader("Content-Disposition", "attachment;filename=\""+URLEncoder.encode(fileName,"UTF-8")+"\"");//读取文件 InputStream inputStream = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(inputStream);byte[] bytes = new byte[1024]; ServletOutputStream outputStream = response.getOutputStream();//该对象可以在响应中写入二进制数据 BufferedOutputStream bos = new BufferedOutputStream(outputStream);int readLength = 0;while((readLength = bis.read(bytes))!=-1){ bos.write(bytes,0,readLength); }//释放资源 inputStream.close(); bis.close(); bos.flush(); outputStream.close(); bos.flush(); } }public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response); }}

好了,还有一点要注意,就是资源位置,我这里是在D盘创建了一个file文件夹,里面存存放几个测试文件就好了

转载于:https://www.cnblogs.com/wufengxyz/archive/2011/11/27/2264944.html

相关资源:Java源代码

最新回复(0)