`
收藏列表
标题 标签 来源
文件上传组件【jsp+Servlet】 【jsp+servlet】 Servlet实现文件上传下载
①	客户端必须以二进制形式提交数据 
a)	在form表单中添加enctype=“multipart/from-data“ 
b)	②当在表单中添加enctype,request中提交的数据形式就发生了改变,我们就不能以request.getParameter这种方式接受数据了,我们需要对request中接受的数据进行处理后才能接受 
接受客户端提交的文件的方式有两种: 
①	fileupload上传:依赖于commons包中的jar文件 
a)	将四个jar文件导入工程文件中 
//在Servlet接受页面提交的数据 
//通过传统的request接受方式,我们只能够接收到客户端提交的文本信息 
//如果客户端想服务器端提交一个文件,服务器端则无法接受提交的文件 
//	 String file=req.getParameter("myFile"); 
//	 String des=req.getParameter("des"); 
//	 System.out.println(file+"<><><>\n"+"<><><>"+des); 
try { 
//创建一个临时指定临时文件夹存放 
DiskFileItemFactory temp=new DiskFileItemFactory(1000,new File("D:/file")); 
//创建上传工具--接受客户端上传的文件 
ServletFileUpload sfu=new ServletFileUpload(temp); 
//通过上传工具对request中的数据进行处理 
//因为用户提交的所有数据都是通过request提交,那么我们可以通过上传工具取到request中的所有数据,存放到一个集合中 
List list=sfu.parseRequest(request); 
//遍历集合,取到集合中文件或者字段 
Iterator it= list.iterator(); 
while (it.hasNext()) { 
FileItem fi = (FileItem) it.next(); 
//判断每一个条目是文件还是字段 
if(fi.isFormField()){ 
//如果是一个字段,则取到字段名和字段值 
String fileName=fi.getFieldName(); 
String fileValue=fi.getString("GBK"); 
System.out.println(fileName+"<><><><"+fileValue); 
}else{ 
//如果不是字段,则表示fi是一个文件,我们需要获取文件的名字,然后把文件保存到指定的目录 
String path=fi.getName(); 
String fileName=path.substring(path.lastIndexOf("\\")+1); 
String savePath=getServletContext().getRealPath("/file/")+"/"+fileName; 
fi.write(new File(savePath)); 
} 
} 
} catch (FileUploadException e) { 
e.printStackTrace(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
②	SmartUpload上传:依赖于一个第三方架包SmartUpload.jar包 
//创建解析工具 
SmartUpload su = new SmartUpload(); 
//通过工具对request中的数据进行初始化 
su.initialize(getServletConfig(), request, response); 
//设置上传文件是限制信息:设置允许上传的单个文件的最大值,设置允许上传文件的类型 
su.setMaxFileSize(1024*1024*10); 
su.setAllowedFilesList("jpg,jpeg,bmp,gif,png"); 
//开始接收客户端的上传 
su.upload(); 
//取到上传的所有文件(files相当于一个集合) 
Files fs = su.getFiles(); 
//取到fs中文件的个数 
for (int i = 0; i < fs.getCount(); i++) { 
File f = fs.getFile(i); 
String fName = f.getFileName(); 
//取到服务器上的files文件夹的路径 
String savePath = getServletContext().getRealPath("/file")+"/"+fName; 
f.saveAs(savePath); 
} 
//从su不能够直接取到字段,但是我们可以取到一个经过处理了的request对象 
Request req = su.getRequest(); 
String des = req.getParameter("des"); 
System.out.println(des); 

//上传成功之后跳转到列表页面,在列表页面中显示files文件夹中的所有文件 
String path = getServletContext().getRealPath("/file"); 
java.io.File dir = new java.io.File(path); 
String[] names = dir.list(); 
List<String> fileNames = new ArrayList<String>(); 
for (int i = 0; i < names.length; i++) { 
fileNames.add(names[i]); 
} 

request.setAttribute("ns", fileNames); 
request.getRequestDispatcher("list.jsp").forward(request, response); 
文件下载: 
//接受客户端需要下载的文件的文件名 
String name=request.getParameter("fname"); 
String path=getServletContext().getRealPath("/file")+"/"+name; 
InputStream is=new FileInputStream(path); 
OutputStream os=response.getOutputStream(); 
response.setContentType("application/exe.pdf"); 
response.addHeader("Content-Disposition", "attachment;filename="+name); 
byte[] b=new byte[500]; 
int len=-1; 
while((len=is.read(b))!=-1){ 
os.write(b, 0, len); 
os.flush(); 
} 
os.close(); 


------------------------------------------------------------------------------------------------------------
package com.jsp.upload.servlet;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class JspUploadServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		String method = request.getParameter("method");
		if ("upload".equals(method)) {
			upload(request, response);
		}
	}

	@SuppressWarnings("unchecked")
	public void upload(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		File tempFile = null;
		try {
			// 创建一个临时指定临时文件夹存放,函数调用完应该将临时文件删除,这样能节约空间。
			tempFile = new File("C:/file");
			if (!tempFile.exists()) {
				tempFile.mkdir();
			}
			DiskFileItemFactory temp = new DiskFileItemFactory(1000, tempFile);
			// 创建上传工具--接受客户端上传的文件
			ServletFileUpload sfu = new ServletFileUpload(temp);
			// 通过上传工具对request中的数据进行处理
			// 因为用户提交的所有数据都是通过request提交,那么我们可以通过上传工具取到request中的所有数据,存放到一个集合中
			List list = sfu.parseRequest(request);
			// 遍历集合,取到集合中文件或者字段
			Iterator it = list.iterator();
			while (it.hasNext()) {
				FileItem fi = (FileItem) it.next();
				// 判断每一个条目是文件还是字段
				if (fi.isFormField()) {
					// 如果是一个字段,则取到字段名和字段值
					String fileName = fi.getFieldName();
					String fileValue = fi.getString("GBK");
				} else {
					// 如果不是字段,则表示fi是一个文件,我们需要获取文件的名字,然后把文件保存到指定的目录
					String path = fi.getName();
					String fileName = path
							.substring(path.lastIndexOf("\\") + 1);
					String savePath = getServletContext().getRealPath("/file/");
					File file = new File(savePath);
					if (!file.exists()) {
						file.mkdirs();
					}
					savePath = file.getPath() + "/" + fileName;
					fi.write(new File(savePath));
					fi.getOutputStream().close();
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cycleDelFile(tempFile);
		}
	}

	/**
	 * 获取指定格式的日期。
	 * 
	 * @param date
	 * @return
	 */
	public static String dateFormat(Date date) {
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_hhmmss");
		String time = format.format(date);
		if (!isNull(time)) {
			return time;
		}
		return null;
	}

	/**
	 * 文件重命名。
	 * 
	 * @param filename
	 * @return
	 */
	public String renameFile(String filename) {
		String fileExtendname = "";
		if (null != filename && !"".equals(filename)) {
			Date date = new Date();
			int indexOfDot = filename.indexOf(".");
			fileExtendname = filename.substring(indexOfDot + 1);
			return dateFormat(date) + "." + fileExtendname;
		}
		return null;
	}

	/**
	 * 循环删除文件。
	 * 
	 * @param file
	 */
	public void cycleDelFile(File file) {
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File fl : files) {
				cycleDelFile(fl);
			}
			file.delete();
		} else {
			file.delete();
		}
	}

	public static boolean isNull(String str) {
		return "".equals(str) || null == str;
	}


}



Jar:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
commons-logging-1.0.4.jar
Global site tag (gtag.js) - Google Analytics