commons-fileupload-1.4使用及問題

来源:https://www.cnblogs.com/puhc/archive/2019/04/07/10666552.html
-Advertisement-
Play Games

文件上傳 使用commons-fileupload-1.4控制項及依賴的commons-io-2.6控制項 jsp頁面中內容 <form action="../servlet/FileUpdate" method="post" enctype="multipart/form-data"> <div al ...


文件上傳

 使用commons-fileupload-1.4控制項及依賴的commons-io-2.6控制項

jsp頁面中內容

<form action="../servlet/FileUpdate" method="post" enctype="multipart/form-data">
        <div align="center">
            <fieldset style="width:80%">
                <legend>上傳文件</legend><br/>
                    <div align="left">上傳文件1</div>
                    <div align="left">
                        <input type="file" name="file1"/>
                    </div>
                   
                    <div>
                        <div align='left'>
                            <input type='submit' value="上傳文件"/>
                        </div>
                    </div>
            </fieldset>
        </div>
 </form>

servlet

 1 public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         response.setContentType("text/html;charset=utf-8");
 4         PrintWriter out = response.getWriter();
 5         // Create a factory for disk-based file items
 6         DiskFileItemFactory factory = new DiskFileItemFactory();
 7         // Configure a repository (to ensure a secure temp location is used)
 8         ServletContext servletContext = this.getServletConfig().getServletContext();
 9         File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
10         factory.setRepository(repository);
11         // Create a new file upload handler
12         ServletFileUpload upload = new ServletFileUpload(factory);
13         upload.setHeaderEncoding("utf-8");
14         // Parse the request
15         String saveName = "";
16         try {
17             List<FileItem> items = upload.parseRequest(request);
18             for (FileItem item : items) {
19                 if(item.isFormField()){//如果只是表單中信息,不是表單文件
20                     String fieldName = item.getFieldName();
21                     String fieldValue = item.getString();
22                     out.print("<br>fieldName: "+fieldName+",--fieldValue: "+fieldValue);
23                 }else{
24                     InputStream inputStream = item.getInputStream();
25                     //得到保存文件的路徑
26                     String realpath=this.getServletContext().getRealPath("update");
27                     //得到上傳的文件的名字,可能顯示的是路徑,所以需要取出文件名
28                     String allFilePath = item.getName();
29                     //getName()值為絕對路徑!!!下麵代碼轉換取文件名
30                     String fileName = null;
31                     int ind = allFilePath.lastIndexOf("\\");
32                     if (ind != -1) {
33                         fileName = allFilePath.substring(ind + 1);
34                     }else {
35                         fileName = allFilePath;
36                     }
37                    
38                     out.print("<br>上傳的文件名: "+fileName);
39                     //讀取的不能是目錄,應該加上文件名
40                     File file=new File(realpath + "\\" + fileName);
41                     if(file.getParentFile().exists()){
42                         file.createNewFile();//創建文件
43                     }else {
44                         file.getParentFile().mkdirs();//創建父級文件路徑
45                         file.createNewFile();//創建文件
46                     }
47                     FileOutputStream fos=new FileOutputStream(file);
48                     byte[] bytes= new byte[1024];
49                     int len=0;
50                     //寫入文件
51                     while((len=inputStream.read(bytes))!=-1){
52                         fos.write(bytes, 0, len);
53                     }
54 
55                     inputStream.close();
56                     fos.close();
57                     out.print("<h3>"+allFilePath+"文件上傳成功</h3>");
58                 }
59             }
60             
61             
62         } catch (FileUploadException e) {
63             e.printStackTrace();
64         } catch (FileNotFoundException e) {
65             e.printStackTrace();
66             System.out.println(saveName);
67         }
68    }

 

web.xml

<servlet>
    <servlet-name>FileUpdate</servlet-name>
    <servlet-class>com.oneself.shopping.servlet.FileUpdate</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FileUpdate</servlet-name>
    <url-pattern>/servlet/FileUpdate</url-pattern>
</servlet-mapping>

 

 

問題

  java.io.FileNotFoundException: D:\update (拒絕訪問。)

  FileOutputStream讀取流的時候如果是文件夾,就會出此錯誤。讀取的目錄後面要加文件名,如下:

 1  File file=new File(realpath + "\\" + fileName);
 2                     if(file.getParentFile().exists()){
 3                         //file.getParentFile().mkdirs();//創建父級文件路徑
 4                         file.createNewFile();//創建文件
 5                         System.out.println(file.exists());
 6                     }else {
 7                         file.getParentFile().mkdirs();//創建父級文件路徑
 8                         file.createNewFile();//創建文件
 9                     }
10                     FileOutputStream fos=new FileOutputStream(file);

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 給定一個 n × n 的二維矩陣表示一個圖像。將圖像順時針旋轉 90 度。說明:你必須在原地旋轉圖像,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉圖像。示例 1:給定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋轉輸入矩陣,使其變為:[ [7 ...
  • 給定一個沒有重覆數字的序列,返回其所有可能的全排列。示例:輸入: [1,2,3]輸出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] 兩種方法,第一種用了STL中的函數,第二種用遞歸+回溯,我個人很喜歡第二種方法 ...
  • 使用Consul提供註冊和發現服務 什麼是 Consul Consul 是 HashiCorp 公司推出的開源工具,用於實現分散式系統的服務發現與配置。與其它分散式服務註冊與發現的方案,Consul 的方案更“一站式”,內置了服務註冊與發現框架、分佈一致性協議實現、健康檢查、Key/Value 存儲 ...
  • 前言 - 那久遠的故事 工作好多年, 有時腦海裡總回想兒時看的夢. 那時還剛上初中, 班上個子小的同學, 閑暇娛樂可能就是看 <飄渺之旅> 之類的小說. 前幾年嘗試滿足自己少年時的記憶. 於是寫加整理了這本書 <C 修真之旅> 讓我們蕩起雙槳 - https://music.163.com/#/so ...
  • 1.Sublime Text: 這是一個輕量級的代碼編輯器,跨平臺,支持幾十種編程語言,包括Python,Java,C/C++等,小巧靈活,運行輕快,支持代碼高亮、自動補全、語法提示,插件擴展豐富,是一個很不錯的代碼編輯器,配置相關文件後,可直接運行python程式: 2.VS Code: 這是微軟 ...
  • 最近在學習Python,不得不說,Python真的是一門很好用的語言。但是學習的過程中關於變數作用域(scope)的命名空間(namespace)的問題真的把我給搞懵了。在查閱了相關資料之後,覺得自己對Python的作用域和命名空間有了一定得瞭解。故寫在這裡,一方面加深自己的理解,另一方面分享知識。 ...
  • 本文將主要講解 J.U.C 中的 Future 框架,並分析結合源碼分析其內部結構邏輯; 一、Future 框架概述 JDK 中的 Future 框架實際就是 Future 模式的實現,通常情況下我們會配合線程池使用,但也可以單獨使用;下麵我們就單獨使用簡單舉例; 1. 應用實例 列印: 如上面代碼 ...
  • 前段時間有個需求:將生產環境的部分數據轉移到測試伺服器進行測試。由於只需要導入特定賬號的數據,我就想著將寫個腳本,將數據組裝成sql語句導出為sql文件,然後轉移到測試伺服器,導入到MySQL中。想象是美好的,過程是痛苦的,下麵總結下幾點。 PHP腳本的處理 1、腳本的思路就是:查詢特定賬號數據,組 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...