JSP Servlet 上传

1.需要两个jar包commons-fileupload-1.2.1.jar和commons-io-1.4.jar

2.几个文件:index.jsp   登录页面文件

                     web.xml    配置启动项

                     message.jsp   表示成功的页面文件

                     upload.java  servlet  类文件

3.web.xml "/servlet/类文件"表示跳转页面的网址:localhost:端口/工程名/servlet/类文件

<servlet>
<servlet-name>类文件</servlet-name>
<servlet-class>包.类文件</servlet-class>
</servlet>
 
<servlet-mapping>
<servlet-name>类文件</servlet-name>
<url-pattern>/servlet/类文件</url-pattern>
</servlet-mapping>
4.index.jsp enctype支持多文件上传 action表示submit指向的类文件
<pre name="code" class="javascript"><body>
  <form action="servlet/类文件" enctype="multipart/form-data" method="post">
    上传用户:<input type="text" name="username"><br/>
    上传文件1:<input type="file" name="file1"><br/>
    上传文件2:<input type="file" name="file2"><br/>
    <input type="submit" value="提交">
  </form>
 </body>
5.upload.java
 
<pre name="code" class="java">package me.gacl.web.controller;
   
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 import java.util.UUID;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadBase;
 import org.apache.commons.fileupload.ProgressListener;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
  
 public class UploadHandleServlet extends HttpServlet {
  
   public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
       
         String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
         String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
         File tmpFile = new File(tempPath);
         if (!tmpFile.exists()) {
           tmpFile.mkdir();
         }
         String message = "";
         try{
           DiskFileItemFactory factory = new DiskFileItemFactory();
           
           factory.setSizeThreshold(1024*100);
           factory.setRepository(tmpFile);
           ServletFileUpload upload = new ServletFileUpload(factory);
           upload.setProgressListener(new ProgressListener(){
             public void update(long pBytesRead, long pContentLength, int arg2) {
               System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);
             }
           });
           upload.setHeaderEncoding("UTF-8"); 
           if(!ServletFileUpload.isMultipartContent(request)){
             return;
           }
           upload.setFileSizeMax(1024*1024);
           upload.setSizeMax(1024*1024*10);
           List<FileItem> list = upload.parseRequest(request);
           for(FileItem item : list){
             if(item.isFormField()){
               String name = item.getFieldName();
               String value = item.getString("UTF-8");
               //value = new String(value.getBytes("iso8859-1"),"UTF-8");
               System.out.println(name + "=" + value);
             }else{
               String filename = item.getName();
               System.out.println(filename);
               if(filename==null || filename.trim().equals("")){
                 continue;
               }
               filename = filename.substring(filename.lastIndexOf("\\")+1);
               String fileExtName = filename.substring(filename.lastIndexOf(".")+1);
               System.out.println("上传的文件的扩展名是:"+fileExtName);
               InputStream in = item.getInputStream();
               String saveFilename = makeFileName(filename);
               String realSavePath = makePath(saveFilename, savePath);
               FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename);
               byte buffer[] = new byte[1024];             
               int len = 0;
               while((len=in.read(buffer))>0){
                 out.write(buffer, 0, len);
               }
               in.close();
               out.close();              
               message = "文件上传成功!";
             }
           }
         }catch (FileUploadBase.FileSizeLimitExceededException e) {
           e.printStackTrace();
           request.setAttribute("message", "单个文件超出最大值!!!");
           request.getRequestDispatcher("/message.jsp").forward(request, response);
           return;
         }catch (FileUploadBase.SizeLimitExceededException e) {
           e.printStackTrace();
           request.setAttribute("message", "上传文件的总的大小超出限制的最大值!!!");
           request.getRequestDispatcher("/message.jsp").forward(request, response);
           return;
         }catch (Exception e) {
           message= "文件上传失败!";
           e.printStackTrace();
         }
         request.setAttribute("message",message);
         request.getRequestDispatcher("/message.jsp").forward(request, response);
   }
    
   private String makeFileName(String filename){ 
     return UUID.randomUUID().toString() + "_" + filename;
   }   

  private String makePath(String filename,String savePath){
     int hashcode = filename.hashCode();
     int dir1 = hashcode&0xf;
     int dir2 = (hashcode&0xf0)>>4; 
     String dir = savePath + "\\" + dir1 + "\\" + dir2; //upload\2\3 upload\3\5
     if(!file.exists()){
       file.mkdirs();
    }
     return dir;
   } 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
  
     doGet(request, response);
   }
 }
</pre><p></p><p>上传的文件存放在workspace/.metadata/.plugins/org.eclipse..wst.server.core/tmp0/wtpwebapps/工程名/WEB-INF里面</p><pre>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值