文件上传

查看文档
导入相关jar包:
commons-fileupload
commons-io
上传需要的三行代码:

// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List<FileItem> items = upload.parseRequest(request);

在使用文件上传时 使用req.getParameter(“xxx”)获取不了值,编码方式不同

String value = fileItem.getString("UTF-8");

要避免名称相同

 // 生成一个不重复的文件名称
			String name = UUID.randomUUID().toString();
			// 获取文件的拓展名 xxx.jpg
			String extension = FilenameUtils.getExtension(fileItem.getName());
			String filename = name + "." + extension;

部署在服务器上应当使用相对路径

// 文件保存位置应当使用相对路径
				String path = req.getServletContext().getRealPath("/upload");
				fileItem.write(new File(path, filename));

文件上传工具类:

public class FileUploadUtils {
	private FileUploadUtils() {
	}
	public static Map<String,Object> upload(HttpServletRequest req) {
		Map<String,Object> map=new HashMap<>();
		try {
			// 创建FileItem对象工厂
			FileItemFactory factory = new DiskFileItemFactory();
			// 创建文件上传处理器
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 设置允许的单个文件的大小
			//upload.setFileSizeMax(1024 * 10);
			// 设置一次请求中的
			// 解析请求中的额数据 将每个表单元素相关的数据封装在一个个FileItem对象中
			List<FileItem> items = upload.parseRequest(req);
			for (FileItem fileItem : items) {
				if (fileItem.isFormField()) {
					// 为true表示普通表单元素(关心值)
					String value = fileItem.getString("UTF-8");
					map.put(fileItem.getFieldName(),fileItem.getString("UTF-8"));
				} else {
					// 约束文件的类型
//					// fileItem.getContentType()----->image/jpeg
					if (!fileItem.getContentType().startsWith("image/")) {
						// 添加错误信息
						//抛出自定义异常
						throw new LogicException("亲,文件格式不正确");
					}
					// 表示上传表单元素(关心文件的数据)
					// 将文件保存到磁盘中
					// 生成一个不重复的文件名称
					String name = UUID.randomUUID().toString();
					// 获取文件的拓展名 xxx.jpg
					String extension = FilenameUtils.getExtension(fileItem.getName());
					String filename = name + "." + extension;
					// 文件保存位置应当使用相对路径
					String path = req.getServletContext().getRealPath("/upload");
					fileItem.write(new File(path, filename));
					map.put("picPath", "/upload/"+filename);
				}
			}
		} catch (LogicException e) {
			throw e;
		} catch (FileSizeLimitExceededException e) {
			throw new LogicException("亲,大小超过限制", e);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值