java开发

java文件上传的注意事项(多图上传)

2017-07-03  本文已影响0人  baii

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);

上一篇下一篇

猜你喜欢

热点阅读