基础14——文件的上传和下载
1.前述:文件的上传(文件上传到服务器)与下载(从服务器中下载文件)的方法很多,这里主要介绍的是jspSmartUpload实现文件的上传和下载。
2.jspSmartUpload简介
jspSmartUpload具有以下的优点:
1)配置非常简单:用户只需要把下载的jspSmartUpload.jar文件放在web项目的WEB-INF\lib目录下即可。
2)对上传的文件具有很强的可控性:jspSmartUpload可以限制上传文件的扩展名,大小等。
3)易获取上传文件的信息:使用jspSmartUpload自带的File类可以轻松地获取上传文件的信息,例如文件名,文件大小,扩展名等。
4)实现文件下载方便:使用jspSmartUpload仅需要几行代码就可以实现文件下载。
5)jspSmartUpload包提供了5个类,即File,Files,Request,SmartUpload和SmartUploadException(自定义异常类)。
3.jspSmartUpload包的类的具体方法介绍
百度一大堆,这边就不细贴了,有空的时候再搞。
4.文件上传的实例
test.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="/upload/ServletUpload" method="post" enctype="multipart/form-data"> <input type="file" name="fileName"><br/> <input type="submit" name="upload" value="上传"> </form> </body> </html>
uploadServlet文件
package com.upload; import java.io.IOException; import java.util.Date; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jspsmart.upload.File; import com.jspsmart.upload.Files; import com.jspsmart.upload.Request; import com.jspsmart.upload.SmartUpload; import com.jspsmart.upload.SmartUploadException; /** * Servlet implementation class ServletUpload */ @WebServlet("/ServletUpload") public class ServletUpload extends HttpServlet { //声明servletconfig对象,作为initialize()方法的参数 ServletConfig servletconfig; public ServletUpload() { super(); } //初始化servletconfig对象 public void init(ServletConfig config)throws ServletException{ this.servletconfig=config; } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.实例化一个SmartUpload()对象 SmartUpload su=new SmartUpload(); //2.初始化SmartUpload对象 try { su.initialize(servletconfig, request, response); }catch (ServletException e) { e.printStackTrace(); } //3.设置文件上传的限制 su.setAllowedFilesList("doc,docx,txt"); //单个文件的最大字节数 su.setMaxFileSize(3*1024*1024); //文件的总最大字节数 su.setTotalMaxFileSize(12*1024*1024); //使用upload上传 try { su.upload(); }catch (ServletException e) { e.printStackTrace(); // TODO: handle exception }catch (IOException e) { e.printStackTrace(); } catch (SmartUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } //5.文件的保存 Date curDate=new Date(); long d=curDate.getTime();//long型 //创建request对象 Request req=su.getRequest(); //获取上传文件 //获取全部上传文件 Files files=su.getFiles(); //获取指定位置的文件 File file=files.getFile(0); //获取文件扩展名 String extFile=file.getFileExt(); String mainFile=String.valueOf(d); //文件上传到服务器端的upload目录下,文件以当前时间命名 String filename="/upload/"+mainFile+"."+extFile; System.out.println(filename); try{ file.saveAs(filename); }catch (IOException e) { e.printStackTrace(); } catch (SmartUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
注意:在我们的webcontent里面需要自己去建立一个与servlet里面的指定的filename的目录。比如说这边是upload,然后将我们的项目部署到我们的tomcat里面去。
实例结果:
总结:上传功能的具体步骤为:
1)实例化SmartUpload对象。
2)使用initialize()方法初始化SmartUpload对象,如果直接在jsp页面中使用该方法,则推荐使用initialize(PageContext pageContext)形式;若在
Servlet程序中,推荐使用initialize(ServletConfig servletconfig,HttpServletRequest request,HttpServletResponse response)形式。
3)使用setMaxFileSize()方法设置上传文件的大小,类型等。
4)使用upload()方法上传文件。
5)使用save()方法将上传文件保存至web应用程序的指定目录下。
注意:这五个步骤不可以调换顺序,并且在运行上传文件之前,服务器端的web项目必须存在指定的上传文件保存目录。也就是上面说的upload文件。
5.文件下载的实例
jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="/upload/DownloadServlet">下载文件</a> </body> </html>
servlet文件:
package com.upload; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jspsmart.upload.SmartUpload; import com.jspsmart.upload.SmartUploadException; /** * Servlet implementation class DownloadServlet */ @WebServlet("/DownloadServlet") public class DownloadServlet extends HttpServlet { ServletConfig config=null; public DownloadServlet() { super(); // TODO Auto-generated constructor stub } public void init(ServletConfig config)throws ServletException{ this.config=config; } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //新建一个SmartUpload对象 SmartUpload su=new SmartUpload(); //初始化 su.initialize(config, request, response); /* * 设定contentdisposition为null以禁止浏览器自动打开文件,保证单击链接后是下载文件。若不设定,则下载的文件扩展名为.doc时 * 浏览器将自动用word打开它,当扩展名为.pdf时,浏览器将要pdf阅读器打开它 */ su.setContentDisposition(null); //下载文件 try { //假设下载的文件为upload下的txt文件 su.downloadFile("/upload/a.txt"); }catch (SmartUploadException e) { e.printStackTrace(); } } }
效果图:
总结:实现下载的具体步骤为:
1)实例化smartUpload对象
2)使用initialize()方法初始化SmartUpload对象
3)使用setContentDisposition()方法设置MIME类型。
4)使用downloadFIle从指定位置下载文件