使用commons-fileupload.jar自定义文件上传与读取

文件上传与读取

文件上传的基本思路:

将文件通过流的方式写入相对于当前项目的一个的文件夹中(这种方式是将图片放入tomcat容器中的)
读取的时候直接获取其(请求路径(存入数据库的路径))
请求路径一般为当前项目的ContextPath 加上 相对于该项目的存放文件的路径
即 contextPath + upload
(通过文件流的方式读取也行)
基本流程:

引入第三方jar包 commons-fileupload.jar
获取当前项目的ContextPath路径
public static ServletContext getContext() {
	if(null == context){
		throw new RuntimeException("项目启动失败,或者项目已停止");
	}
	return context;
}

public static void setContext(ServletContext context) {
	CommonUtil.context = context;
}
指定文件存储的相对于该项目的文件夹的路径
	(1)从.properties文件中读取(file.properties)
			文件:例:environment=development   //environment:文件上传路径的前缀
					  development.path=../upload	//.path为文件上传的后缀
	(2)加载配置文件(获取相对于当前项目的存放文件路径)
		例:private static void loadProperties() {
				Properties p = new Properties();
				try {
					p.load(CommonUtil.class.getClassLoader().getResourceAsStream("file.properties"));
					String key = p.getProperty(Constant.UPLOAD_PATH_PREFIX);
					uploadPath = p.getProperty(key + Constant.UPLOAD_PATH_SUFFIX);
				} catch (IOException e) {
					throw new IllegalArgumentException("file.properties配置文件未找到", e);
				}
				if(null == uploadPath){
					throw new IllegalArgumentException("文件上传路径获取失败");
				}
			}
文件上传路径
		获取相对于当前项目的存放文件路径的真实路径
public static String getUploadPath(){
	String realPath = getContext().getRealPath(uploadPath);
	File f = new File(realPath);
	if(!f.exists()){
		boolean flag = f.mkdirs();
		if(!flag){
			throw new IllegalArgumentException("文件上传路径创建失败:" + realPath);
		}
	}
	return realPath;
}
5.文件读取是的路径contextPath + upload
	public static String getContextPath(){
		if(null == contextPath){
			contextPath = getContext().getContextPath() + "/" + uploadPath;
		}
		return contextPath;
	}

	public static ServletContext getContext() {
		if(null == context){
			throw new RuntimeException("项目启动失败,或者项目已停止");
		}
		return context;
	}

	public static void setContext(ServletContext context) {
		CommonUtil.context = context;
	}
最后获取文件集合
public	static Map<String, Object> getParamsFromRequest(HttpServletRequest request) throws Exception {
	// 使用第三方的jar包,commons-fileupload.jar 实现文件上传
	// 获取DiskFileItem的工厂
	DiskFileItemFactory factory = new DiskFileItemFactory();
	// 创建解析工具
	ServletFileUpload upload = new ServletFileUpload(factory);
	List<FileItem> fileItemList = upload.parseRequest(request);
	// 自定义存放上传的文件类的容器
	List<CommonsMultipartFile> multiFileList = new ArrayList<CommonsMultipartFile>();
	// 自定义Request类
	Map<String, Object> map = new HashMap<String, Object>();
	for (FileItem fi : fileItemList) {
		// 如果是普通输入框(如果非文件上传框)
		if(fi.isFormField())
		{
			// 放到request中
			String key = fi.getFieldName();
			String value = fi.getString("UTF-8");
			map.put(key, value);
		}
		if(!fi.isFormField())
		{
			// 创建文件对象
			CommonsMultipartFile multiFile = new CommonsMultipartFile(fi);
			multiFileList.add(multiFile);
		}
	}
	map.put("fileList", multiFileList);
	return map;
}

注意点:

在eclipse中,tomcat部署项目时
会将发布的项目部署到了eclipse“克隆”webapps目录得到的一个目录中
所以会导致获取一大串存放文件的路径的克隆地址(这会导致你无法访问即读取到该图片)

解决方案:

			双击servers下的tomcat:
				将server Locations 中修改为第二项 Use Tomcat installation----  在将下方的Deploy path 
					修改为你的Tomcat下的webapps目录
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值