servlet接收客戶端傳過來的圖片

public class Uploadfile1 extends HttpServlet {  
  
    @Override  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        request.setCharacterEncoding("utf-8");  
        //獲得磁盤文件條目工廠。  
        DiskFileItemFactory factory = new DiskFileItemFactory();  
        //獲取文件上傳需要保存的路徑,upload文件夾需存在。  
        String path = request.getSession().getServletContext().getRealPath("/upload");  
        //設置暫時存放文件的存儲室,這個存儲室可以和最終存儲文件的文件夾不同。因爲當文件很大的話會佔用過多內存所以設置存儲室。  
        factory.setRepository(new File(path));  
        //設置緩存的大小,當上傳文件的容量超過緩存時,就放到暫時存儲室。  
        factory.setSizeThreshold(1024*1024);  
        //上傳處理工具類(高水平API上傳處理?)  
        ServletFileUpload upload = new ServletFileUpload(factory);  
          
        try{  
            //調用 parseRequest(request)方法  獲得上傳文件 FileItem 的集合list 可實現多文件上傳。  
            List<FileItem> list = (List<FileItem>)upload.parseRequest(request);  
            for(FileItem item:list){  
                //獲取表單屬性名字。  
                String name = item.getFieldName();  
                //如果獲取的表單信息是普通的文本信息。即通過頁面表單形式傳遞來的字符串。  
                if(item.isFormField()){  
                    //獲取用戶具體輸入的字符串,  
                    String value = item.getString();  
                    request.setAttribute(name, value);  
                }  
                //如果傳入的是非簡單字符串,而是圖片,音頻,視頻等二進制文件。  
                else{   
                    //獲取路徑名  
                    String value = item.getName();  
                    //取到最後一個反斜槓。  
                    int start = value.lastIndexOf("\\");  
                    //截取上傳文件的 字符串名字。+1是去掉反斜槓。  
                    String filename = value.substring(start+1);  
                    request.setAttribute(name, filename);  
                      
                    /*第三方提供的方法直接寫到文件中。 
                     * item.write(new File(path,filename));*/  
                    //收到寫到接收的文件中。  
                    OutputStream out = new FileOutputStream(new File(path,filename));  
                    InputStream in = item.getInputStream();  
                      
                    int length = 0;  
                    byte[] buf = new byte[1024];  
                    System.out.println("獲取文件總量的容量:"+ item.getSize());  
                      
                    while((length = in.read(buf))!=-1){  
                        out.write(buf,0,length);  
                    }  
                    in.close();  
                    out.close();  
                }  
            }  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
          
    }  
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章