java文件上传的注意事项(多图上传)
1.前期的准备工作
图片上传,我们需要先来了解一下文件的上传。
以jsp文件与servlet作为客户端服务器端进行上传下载为例。
客户端页面(jsp文件)需要设置
1.表单的method=post
2.设置enctype=multipart/form-date
3.使用具有name属s性的file元素
服务器端(需要借助第三方jar包:commons-fileupload-1.2.2.jar,commons-io-2.2.jar)
1.创建DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
2.创建ServletFileUpload
ServletFileUpload upload = new ServletFileUpload(factory);
3.通过ServletFileUpload的parseRequest方法得到所有的FileItem
Listlist = upload.parseRequest(request);
2.开始执行上传操作
for(FileItem item:list){
//需要先判断一下是文件(file)还是表单信息
if (!item.isFormField()) {
//暂时用时间节点来保证存储的路径的唯一性
String path = this.getServletContext().getRealPath("\\upload");
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("/yyyy/MM/dd/HH/mm/ss/");
File file = new File(path+format.format(date));
//判断文件是否存在 不存在就创建
if (!file.exists()) {
file.mkdirs();
}
File file2 = new File(file.getPath(), item.getName());
FileOutputStream fos = new FileOutputStream(file2);
IOUtils.copy(item.getInputStream(), fos);
fos.close();
}
上传的文件在Tomcat路径下
D:\tool\Tomcat\apache-tomcat-6\apache-tomcat-6.0.44\webapps\Upload\upload
这是单文件上传,通过实践节点来保证唯一性
因为相同的文件,上传之后会覆盖之前的。所以我们一定要保证上传文件的唯一性
我们还可以通过在服务器端随机生成UUID号+文件名来生成新的唯一的文件名
//系统给定的随机的id号---唯一id
UUID uuid = UUID.randomUUID();
String fileName = uuid + "_"+item.getName();
System.out.println("filename:"+fileName);
File file = new File(parentFile, fileName);
3.文件上传
Mapmap = new HashMap<>();
if(item.isFormField()){
String key = item.getFieldName();
if(map.get(key)==null){
map.put(item.getFieldName(), item.getString("utf-8"));
}else{
//复选框值的处理
map.put(key, map.get(key)+","+item.getString("utf-8"));
}
}
这里我们用的是一个集合Map来接收,通过BeanUtils.populate(user, map); //将map当成User属性的方式放入到User对象中。(用到了上面第一个jar包)
4.多图片上传
我们需要创建一个对象来接收。
由于我们之前已经做了图片的唯一性操作,所以可以尽情的上传图片,接收的时候用一个队象的List<String>urlList来接收.由于我们之前用的是遍历for(FileItem item:list),所以我们可以把每次遍历的用list来保存。然后也可以转发给前端
user.getListUrls().add("upload"+File.separator+datePath+File.separator+item.getName());
request.setAttribute("listUrls", user.getListUrls());
request.getRequestDispatcher("showImage.jsp").forward(request, response);