基础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从指定位置下载文件

posted @ 2017-12-03 00:52  鹏达君  阅读(299)  评论(0编辑  收藏  举报