在上一篇文件上传的文章中 存在bug 上一篇文件上传
主要的问题是 在web页面文件上传成功后 图片不会在web显示的问题 原因是:没有刷新项目 没有让图片及时到本项目中显示 类似还在缓冲的效果
解决办法 (让项目自动进行刷新):
1、点击Eclipse的Window 下的Preferences
2、在General 下找到Workspace 把 Refresh using native hooks or polling 和 Refresh on access 勾上 然后点击 Apply and Close
解决项目刷新问题后 还有一个问题 : 当用户上传的图片特别大的时候 上传需要的时间会更长 会导致网页没有及时进行显示
解决办法(利用图片压缩功能):
需要用到的三个包 下载 密码:01q6
然后复制上一篇文件上传的代码: 更改从49行开始!
1 package com.it; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.util.Date; 8 import java.util.List; 9 10 import javax.servlet.ServletException; 11 import javax.servlet.annotation.WebServlet; 12 import javax.servlet.http.HttpServlet; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 16 import org.apache.commons.fileupload.FileItem; 17 import org.apache.commons.fileupload.FileUploadException; 18 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 19 import org.apache.commons.fileupload.servlet.ServletFileUpload; 20 21 22 @WebServlet("/register.do") 23 public class RegisterServlet extends HttpServlet { 24 private static final long serialVersionUID = 1L; 25 26 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 //1 28 DiskFileItemFactory factory=new DiskFileItemFactory(); 29 //2 30 ServletFileUpload upload=new ServletFileUpload(factory); 31 //利用文件 32 try { 33 List<FileItem> list=upload.parseRequest(request); 34 for(FileItem fi:list){ 35 //如果是普通 36 if(fi.isFormField()){ 37 System.out.println(fi.getFieldName()+" "+fi.getString("UTF-8")); 38 }else{ 39 //判断图片的类型 40 if(fi.getName().endsWith(".jpg") || fi.getName().endsWith(".png")) { 41 long ti=new Date().getTime(); 42 int wz=fi.getName().lastIndexOf("."); 43 String pricn=fi.getName().substring(wz+1); 44 System.out.println("后缀名:"+pricn); 45 String pna=ti+"."+pricn;//图片名字设置时间戳 46 System.out.println("图片名:"+pna); 47 InputStream in=fi.getInputStream(); 48 File f=new File("D:/pictures/test/"+pna);//输出的位置 49 Long size=fi.getSize();//得到文件的大小 50 51 //判断大小 如果图片大小超过200kb 则进行压缩 否则不压缩 正常输出 52 if(size>204800) { 53 //图片进行压缩 54 Thumbnails.of(fi.getInputStream()).scale(1f).outputQuality(0.25f).toFile(f); 55 }else { 56 FileOutputStream out=new FileOutputStream(f); 57 byte[] b= new byte[1024]; 58 int len; 59 while((len=in.read(b))>-1){ 60 out.write(b,0,len); 61 } 62 out.close(); 63 in.close(); 64 } 65 }else { 66 System.out.println("文件传入错误!"); 67 } 68 } 69 } 70 } catch (FileUploadException e) { 71 72 e.printStackTrace(); 73 } 74 75 } 76 77 78 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 79 doGet(request, response); 80 } 81 82 }
效果: