使用fileUpload实现上传下载demo

package com.gk.java.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletContext;
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.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 设置字符集
		response.setContentType("text/html;charset=UTF-8");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 根据工厂对象创建解析类对象
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		// 设置单个上传文件的大小
		fileUpload.setFileSizeMax(1024 * 50);
		// 设置上传文件的总大小 不能超出3M 超过3M的话要在tomcat的server.xml
		//<Connector  URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
		//加上 maxSwallowSize="-1"
		fileUpload.setSizeMax(1024 * 128);
		// 创建文件路径
		// 代表项目request.getServletContext();
		ServletContext context = request.getServletContext();
		// 在项目的根目录下获取upload这个文件夹
		String realPath = context.getRealPath("/upload");
		//
		File f = new File(realPath);
		// 判断文件夹是否存在
		if (!f.exists()) {
			// 没有则创建这个目录
			f.mkdirs();
		}
		try {
			List<FileItem> list = fileUpload.parseRequest(request);
			for (FileItem fileItem : list) {
				/*
				 * System.out.println("文件内容类型:"+fileItem.getContentType());
				 * System.out.println("表单name属性:"+fileItem.getFieldName());
				 * System.out.println("文件名:"+fileItem.getName());
				 * System.out.println("内容大小:"+fileItem.getSize());
				 * System.out.println("表单value属性值:"+fileItem.getString("UTF-8"))
				 * ; System.out.println("-----------------------------");
				 */
				// 判断属性类型是否是字符串格式的
				if (fileItem.isFormField()) {
					// 是字符串类型的输出
					System.out.println(fileItem.getFieldName());
				} else {
					// 不是字符串的,
					// 加上限制条件只有上传文件大小大于0的才能上传
					if (fileItem.getSize() > 0) {
						// 先获取文件名
						String fileName = fileItem.getName();
						// 设置保存文件的文件名上传时间+UUID+文件名称
						fileName = System.currentTimeMillis() + "_" + UUID.randomUUID().toString().replaceAll("-", "")
								+ "_" + fileName;
						// 设置路径
						File file = new File(f, fileName);
						fileItem.write(file);
					}
				}
			}
			response.getWriter().write("上传成功");
		} catch (FileSizeLimitExceededException e) {
			response.getWriter().write("上传文件超出50K");
			e.printStackTrace();
		} catch (SizeLimitExceededException e) {
			e.printStackTrace();
			response.getWriter().write("总文件大小不能超过128Kb...");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

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

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值