servlet实现图片的上传

我们通常说的上传图片,是将图片上传到服务器上面,本篇以tomcat为例,实现简单的本地图片上传服务器。

一、图片的上传需要引入两个jar包: commons-fileupload-1.4.jar,下载地址: commons-io-2.6.jar,下载地址:

二、视图层

enctype=“multipart/form-data”:表示表单提交的数据时二进制数据。 上传文件窗口的input type为“ file ”.

三、控制层

//设置编码为utf-8
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		FileItemFactory factory = new DiskFileItemFactory();
		 
         // 文件上传处理器
         ServletFileUpload upload = new ServletFileUpload(factory);
 
         // 解析请求信息
         List items = null;
         try {
             items = upload.parseRequest(request);
         }
         catch (FileUploadException e) {
             e.printStackTrace();
         }
 
         // 对请求信息进行判断
         Iterator iter = items.iterator();
         while (iter.hasNext()) {
             FileItem item = (FileItem) iter.next();
             // 信息为普通的格式
             if (item.isFormField()) {
                 String fieldName = item.getFieldName();
                 String value = item.getString();
                 request.setAttribute(fieldName, value);
             }
             // 信息为文件格式
             else {
            	String fileName = item.getName();//获得上传图片的名称
                 int index = fileName.lastIndexOf("\");
                 fileName = fileName.substring(index + 1);
                 request.setAttribute("realFileName", fileName);
                 String basePath =  request.getSession().getServletContext().getRealPath("/images");
                 System.out.println(basePath);//打印当前位置
                 File file = new File(basePath, fileName);
                 try {
                	 
                     item.write(file);
                 }
                 catch (Exception e) {
                     e.printStackTrace();
                 }
             }
            
         }

(注:srs为项目名称)

上面已经完成了图片上传的基本功能,但是由于文件存放的名字相同,当上传上一张图片后,会把之前上传的图片覆盖掉,因此,我们需要将图片的名字更改成随机数的形式,保证文件名不一样。这里我采用的是在文件名称里面加上系统时间,具体做法如下:

Date now = new Date();
         		 SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_hh_ss_mm");
         		 String pubtime = sf.format(now);
                 String fileName = pubtime+item.getName();
经验分享 程序员 微信小程序 职场和发展