1. 程式人生 > >圖片上傳技術實現

圖片上傳技術實現

encoding put com 中文 art get blog span gets

1.參考網站:https://blog.csdn.net/snakemoving/article/details/71076165

2.具體實現

  (1)、下載common-fileupload和common-io(百度搜索或去官網下載)

  用servlet實現文件的上傳,這裏用到Apache的開源工具:common-fileupload。因為common-fileupload依賴於common-io,所以需要同時下載兩個包。

  (2)、將common-fileupload和common-io添加到工程下存放jar的庫中

  (3)、前端頁面設計

 1 <div class="panel border-back text-center"
style="height: 340px"> 2 <br/> 3 <br> 4 <img alt="請上傳個人圖片" src="images/${fileName}" width="120" class="radius-circle" /> 5 <br> 6 <br> 7 <
input type="text" name="fileName" value="${fileName}"> 8 <br> 9 <br> 10 <form action="FileUploadServlet" method="post" enctype="multipart/form-data"> 11 <input type="file" name
="file"> 12 <br> 13 <input type="submit" value="上傳"> 14 </form> 15 </div>

  (4)、後端實現

  

    DiskFileItemFactory dfi = new DiskFileItemFactory();
        //獲得上傳文件的存儲路徑
        String path;
        path = request.getServletContext().getRealPath("/images");
        //設置文件大小超過1024*1024就寫到disk上
        dfi.setSizeThreshold(1024 * 1024);
        //設置存儲的倉庫
        dfi.setRepository(new File(path));
        //實例化一個servletFileUpload對象
        ServletFileUpload sfu = new ServletFileUpload(dfi);
        //解決上傳文件亂碼問題
        sfu.setHeaderEncoding("GBK");
        try {
            List<FileItem> list = sfu.parseRequest(request);
            //取得session
            HttpSession session = request.getSession();
            //遍歷得到每個FileItem
            for (FileItem item : list) {
                //取得表單文本框的名字
                String name = item.getFieldName();
                //如果上傳的是一個文件
                //取得上傳文件的名字,即上傳框中的內容名字
                String value = item.getName();
                //因為在opera瀏覽器中文件上傳item.geName()會得到具體路徑而不止是名字,所以需要從路徑中取出名字
                //取得文件路徑名字開始的位置
                int start = value.lastIndexOf("\\");
                //得到文件名
                String fileName = value.substring(start + 1);
                //讀取文件的內容
                item.write(new File(path, fileName));
                //存儲數據
                session.setAttribute(name, fileName);
                session.setAttribute("fileName", fileName);    

  

3.註意

  (1)、servlet中不能用request.getParameter("字段名")來獲取表單的字段內容,因為表單的enctype="multipart/form-data",這裏傳輸的是二進制,所以不能用`getParameter(“字段名”)獲得。
獲得字段名:

  String name = item.getFieldName();

  String value = item.getName();

  (2)、註意你上傳文件保存的路徑和你img裏src訪問的路徑要一致。

  (3)、註意你導包是否正確,導commons的包不要導tomcat的包,具體的你導包的時候就會發現有兩個選項。

圖片上傳技術實現