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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...