Java使用Commons-FileUpload组件实现文件上传最佳方案
- method方法必须是POST,不能是GET
- 新加一个属性enctype,值为”multipart/form-data”
- 文件表单项<input>的类型为file,即type=”file”
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
import org.apache.commons.fileupload.FileItem; import java.util.HashMap;
import java.util.Map; public class ParamDto { private Map<String,String> paramMap;
private Map<String,FileItem> fileMap; public ParamDto() {
paramMap = new HashMap<>();
fileMap = new HashMap<>();
} public Map<String, String> getParamMap() {
return paramMap;
} public void setParamMap(Map<String, String> paramMap) {
this.paramMap = paramMap;
} public Map<String, FileItem> getFileMap() {
return fileMap;
} public void setFileMap(Map<String, FileItem> fileMap) {
this.fileMap = fileMap;
}
}
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;
import org.imooc.dto.ParamDto; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List; public class RequestUtil { /**
* 从request流中解析参数与上传的文件
* @param request
*/
public static ParamDto parseParam(HttpServletRequest request) { ParamDto result = new ParamDto(); //创建一个FileItem工厂 通过DiskFileItemFactory对象创建文件上传核心组件
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
upload.setHeaderEncoding("UTF-8"); try {
//通过文件上传核心组件解析request请求,获取到所有的FileItem对象
List<FileItem> fileItemList = upload.parseRequest(request); //遍历表单的所有表单项(FileItem) 并对其进行相关操作
for(FileItem fileItem : fileItemList) {
//判断这个表单项如果是一个普通的表单项
if(fileItem.isFormField()) {
result.getParamMap().put(fileItem.getFieldName(),fileItem.getString("UTF-8"));
//如果不是表单的普通文本域,就是
} else {
result.getFileMap().put(fileItem.getFieldName(),fileItem);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
import org.apache.commons.fileupload.FileItem; import java.io.File; public class FileUtil { /**
* 上传文件的保存路径
*/
public static final String SAVE_PATH = "d:/upload/"; /**
* 保存上传的文件
* @param fileItem
* @param path
* @return
* @throws Exception
*/
public static String save(FileItem fileItem,String path) throws Exception {
String fileName = System.currentTimeMillis() + "_" + fileItem.getName();
fileItem.write(new File(path + fileName));
return fileName;
}
}
好啦~ 有空我们再来看看原始的文件上传方式
Java使用Commons-FileUpload组件实现文件上传最佳方案的更多相关文章
- 模拟文件上传(二):使用apache fileupload组件进行文件上传
其中涉及到的jar包: jsp显示层: <%@ page language="java" import="java.util.*" pageEncodin ...
- 使用commons-fileupload-1.2.1.jar等组件实现文件上传
使用的主要jar包:commons-io-1.3.2.jar包;commons-fileupload-1.2.1.jar包:commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前 ...
- jsp实现文件上传(二)用cos组件实现文件上传
jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <hea ...
- jquery组件WebUploader文件上传用法详解
这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: 处理文件上传的服务端组件Backload 用于处理文件上传的服务端组件 ...
- 【java】[文件上传jar包]commons-fileUpload组件解决文件上传(文件名)乱码问题
response.setContentType("text/html; charset=UTF-8"); Boolean isMultipart = ServletFileUpl ...
- Commons组件实现文件上传与下载
一.文件上传 所需jar包 首先是commons-fileupload.jar包 其次是commons-IO.jar包 前者的使用依赖后者,两者缺一不可 实现 前台要求 在前台提交的form表单请求方 ...
- dwz+jquery+fileupload+springmvc实现文件上传 及图片预览
1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarD ...
随机推荐
- mybatis-spring 项目简介
mybatis-spring 主要是为了解决 spring3.0 中支持 mybatis3.0 1 mybatis-spring 主要包含以下几个部分 数据源 SqlSessionFactory Sq ...
- 【Material Design视觉设计语言】应用布局设计
[Material Design视觉设计语言]章节列表 [Material Design视觉设计语言]开篇 [Material Design视觉设计语言]Material Design设计概述 [Ma ...
- C++不让程序一闪而过
末尾加上System("pause") 不过需要注意,这个只在win32下有效.不具备可移植性.
- CGameMainScene类
#ifndef __GAMEMAIN_SCENE_H__ #define __GAMEMAIN_SCENE_H__ #include "cocos2d.h" #include &q ...
- 执行git命令出现 xcrun: error:
xcrun: error: active developer path ("/Applications/Xcode.app/Contents/Developer") does no ...
- apache官方中文hadoop说明文档地址
http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html
- sql语句判断是否为数字、字母、中文
1. sql语句判断是否为数字.字母.中文 select ascii(字段) 数字:48-57字母:65-123汉字:123+ 如,要删除某个全为数字的字段 DELETE FROM table WH ...
- 用log4j将日志写入数据库
以下为log4j中的配置参数: %m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL %r 输出自应用启动到输出该log信息耗费的毫秒数 %t 输出产 ...
- linux和windows动态库加载路径区别
# linux和windows动态库加载路径区别 ### 简介------------------------------ linux加载动态库的路径是系统目录/lib和/usr/lib.- wind ...
- div允许用户输入
主要是用到contenteditable属性,就可以用div让用户输入了 <div id="guo" style="width:500px; height:200p ...