黑马程序员技术交流社区

标题: 关于对JSP+Servlet进行文件上传的问题,跪求啊~~~ [打印本页]

作者: 丁岩    时间: 2013-5-28 16:25
标题: 关于对JSP+Servlet进行文件上传的问题,跪求啊~~~
本帖最后由 丁岩 于 2013-5-28 21:53 编辑

JSP界面表单代码
  1. <form action="/Web/TitMsgServlet" method="post"  enctype="multipart/form-data">
  2. <div id="sign"><label id="t1">个性签名:</label>    <textarea   name= "sign" cols= "25" rows= "2" style="font-size:24px; font-family:'黑体';"></textarea>  <span id="e">不能超过50字</span></div>
  3. <div id="img">
  4. <span id="t2">头像上传:</span>
  5. <input type=file name="img"  id="doc" onchange= "javascript:setImagePreview();" accept="image/jpeg,image/gif,image/png,image/bmp">  
  6. <p><div id="localImag"><img id="preview" width=-1 height=-1 style="diplay:none" /></div></p>
  7. </div>
  8. <input type="hidden"  id="hid" name="hid" value=""/>
  9. <div id="sm">
  10. <input type="submit" value="保存设置"/>
  11. </div>
  12. </form>
复制代码
TitMsgServlet代码
  1. package web.controller;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.annotation.MultipartConfig;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import org.apache.commons.fileupload.FileItemIterator;
  13. import org.apache.commons.fileupload.FileItemStream;
  14. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  15. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  16. import org.apache.commons.fileupload.util.Streams;
  17. @MultipartConfig
  18. public class TitMsgServlet extends HttpServlet implements javax.servlet.Servlet{
  19.          File tmpDir = new File("C:\\abc");//初始化上传文件的临时存放目录  
  20.          File saveDir = new File("C:\\apache-tomcat-7.0.37\\webapps\\Web\\upload");//初始化上传文件后的保存目录  
  21.           public TitMsgServlet()
  22.           {  
  23.             super();  
  24.           }      

  25.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  26.            throws ServletException, IOException
  27.            {
  28.             
  29.             try{  
  30.             if(ServletFileUpload.isMultipartContent(request)){  
  31.               DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象  
  32.               dff.setRepository(tmpDir);//指定上传文件的临时目录  
  33.               dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte  
  34.               ServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象  
  35.               sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸  
  36.               sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸  
  37.               FileItemIterator fii = sfu.getItemIterator(request);//解析request 请求,并返回FileItemIterator集合  
  38.               while(fii.hasNext()){  
  39.                 FileItemStream fis = fii.next();//从集合中获得一个文件流  
  40.                 if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域  
  41.                     String fileName = "biji.jpg";//获得上传文件的文件名  
  42.                     BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流  
  43.                     BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+fileName)));//获得文件输出流  
  44.                     Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹  
  45.                 }  
  46.               }  
  47.               response.getWriter().println("File upload successfully!!!");//终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗  
  48.             }  
  49.         }catch(Exception e){  
  50.             e.printStackTrace();  
  51.         }  
  52.         

  53.            }
  54.         
  55.    


  56.         public void doPost(HttpServletRequest request, HttpServletResponse response)
  57.                         throws ServletException, IOException {

  58.          doGet(request,response);
  59.         }
  60.         
  61.    

  62. }
复制代码
疯了。。。。这个显示能成功,但是目标目录还是没有上传的文件,有没有人帮我改改这个代码,或者提出你的解决方案,要求文件能上传到服务器目录就好了

作者: 丁岩    时间: 2013-5-28 21:53
我自己想到解决方法了
利用Servlet3的新特性就好了getPart获取上传文件
代码如下:
package web.controller;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig
public class TitMsgServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException
       {

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        String savePath = request.getServletContext().getRealPath("/upload");
        Part part = request.getPart("img");

        String header = part.getHeader("content-disposition");
        System.out.println("header="+header);
        String filename = header.substring(header.lastIndexOf("=") + 2,
                header.length() - 1);
        part.write(savePath + File.separator + filename);
        PrintWriter out = response.getWriter();
        out.println("上传成功");
        out.flush();
        out.close();

       }
   
   


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

         doGet(request,response);
    }
   
   

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2