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

浙公网安备 33010602011771号