Javaweb文件上傳的前端和後端

来源:https://www.cnblogs.com/Edwin-future/archive/2018/08/31/9568174.html
-Advertisement-
Play Games

上傳文件的分類: 無論什麼方式上傳文件,都要用post提交方式一: 前端:表單方式上傳文件 <form action="" method="post" enctype="multipart/form-data"> <!--非文件域--> <input type="text" name="desc"/ ...


上傳文件的分類:
無論什麼方式上傳文件,都要用post提交
方式一:
前端:表單方式上傳文件
<form action="" method="post" enctype="multipart/form-data">
<!--非文件域-->
<input type="text" name="desc"/>
<!--文件域-->
<input type="file" name="userHead" />
<input type="submit" value="上傳"/>
</form>

後端:
使用上傳技術是apache中的Commons-fileupload.jar
commons-io.jar
servlet:
1.在表單提交的時候把表單中的所有的數據封裝給request對象
2.通過commons-fileupload的api方法轉換request對象
中的數據到一個List集合中
// Parse the request
List<FileItem> items = upload.parseRequest(request);
3.遍歷 list集合,集合中都包含表單中所有的數據
包含文件域和非文件域
// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();

if (item.isFormField()) {
//是非文件域
String name = item.getFieldName();
String value = item.getString();
...
} else {
//文件域
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
...
//真正上傳文件
item.write(服務端的某個目錄)
}
}
spring mvc:
在springmvc中底層使用還是commons-fileupload.jar
和commons-io.jar,說明spring mvc對apache的Commons-fileupload
產品做二次封裝,封裝成:org.springframework.web.multipart.commons.CommonsMultipartResolver
在springmvc上傳文件api用CommonsMultipartResolver類中的api
<!-- spring mvc 文件上傳 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--能配置多少個property,可以查文檔和查詢源代碼 -->
<!--最大上傳文件的大小 -->
<property name="maxUploadSize" value="8388608"></property>
<property name="resolveLazily" value="true"></property>
</bean>

用springmvc的api上傳文件
MultipartFile的對象調用一個上傳方法
對象.transto();把文件上傳到指定的伺服器上

 

方式二:
前端:沒有表單,用ajax上傳文件,必須藉助第三方
js工具ajaxfileupload.js,類似的上傳文件
的js工具有很多,ajaxfileupload.js工具是基於
jquery庫
//非同步提交
$.ajaxFileUpload({
url:basePath+"user/new",//提交的伺服器地址
secureuri:false,//url鏈接是否安全
fileElementId:"addHeadPicture",//文件域的id
type:"post",//必須是post提交
data:{"loginName":loginName,"password":password1,"nickName":nickName,"age":age,"sex":sex,"roleId":roleId},//傳遞的數據
dataType:"text",//註意text,可以寫成json
success:function(data,status){
//alert(data);
//回的結果串中有其他的字元串,通過下麵的方式
//把沒用的字元串替換掉
data=data.replace(/<PRE.*?>/g,'');
data=data.replace("<PRE>",'');
data=data.replace("</PRE>",'');
data=data.replace(/<pre.*?>/g,'');
data=data.replace("<pre>",'');
data=data.replace("</pre>",'');
alert(data);
},
error:function(){
alert("請求失敗!");
}
});



後端:
使用上傳技術是apache中的Commons-fileupload.jar
commons-io.jar
servlet:
1.在表單提交的時候把表單中的所有的數據封裝給request對象
2.通過commons-fileupload的api方法轉換request對象
中的數據到一個List集合中
// Parse the request
List<FileItem> items = upload.parseRequest(request);
3.遍歷 list集合,集合中都包含表單中所有的數據
包含文件域和非文件域
// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();

if (item.isFormField()) {
//是非文件域
String name = item.getFieldName();
String value = item.getString();
...
} else {
//文件域
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
...
//真正上傳文件
item.write(服務端的某個目錄)
}
}
spring mvc:
在springmvc中底層使用還是commons-fileupload.jar
和commons-io.jar,說明spring mvc對apache的Commons-fileupload
產品做二次封裝,封裝成:org.springframework.web.multipart.commons.CommonsMultipartResolver
在springmvc上傳文件api用CommonsMultipartResolver類中的api
<!-- spring mvc 文件上傳 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--能配置多少個property,可以查文檔和查詢源代碼 -->
<!--最大上傳文件的大小 -->
<property name="maxUploadSize" value="8388608"></property>
<property name="resolveLazily" value="true"></property>
</bean>

用springmvc的api上傳文件
MultipartFile的對象調用一個上傳方法
對象.transferTo();把文件上傳到指定的伺服器上


補充:
能夠給服務端提交數據的方式
1.用form表單
2.用超鏈接
3.用ajax非同步提交


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

-Advertisement-
Play Games
更多相關文章
  • 學習了類的繼承,今天說一下當父類與子類中有同名函數和變數時那麼程式將怎麼執行。首先明確當基類和子類有同名函數或者變數時,子類依然從父類繼承。 舉例說明: 常式說明: 父類和子類有同名的成員 data;同名函數printfa(); 子類增加兩個列印函數:void son_data();void fat ...
  • 單利模式的核心點在於只能生成1個對象,並且是由類中的靜態變數保存。以下代碼來自《深入PHP 面向對象、模式與實踐》(第三版)第9章/** * Created by PhpStorm. * User: Eilen * Date: 2018/8/31 * Time: 22:48 */class Pref ...
  • SpringMVC基於模型-視圖-控制器(MVC)模式實現,可以構建松耦合的web應用程式。 1、SpringMVC的請求過程 1)請求離開瀏覽器,並攜帶用戶所請求的內容 2)DispatcherServlet角色為調度員(前端控制器)。查詢一個或多個處理器映射確定處理請求的控制器 3)將請求發給選 ...
  • 1、java學習的極佳博客: 1)https://www.cnblogs.com/xdp-gacl (主要包含JavaWeb,java基礎,JavaScript基礎,MyBatis,Servlet3.0) 2)https://www.cnblogs.com/mq0036 (主要包含oracle,前端 ...
  • 一、應用場景 1.在本地測試微信支付回調 二、如何使用natapp實現內網穿透 1.第一步註冊賬號併進行實名制認證 natapp網站地址 https://natapp.cn/ 2.第二步申請免費隧道並配置你的埠 3.下載客戶端 解壓: 4.複製你的隧道的authtoken並使用終端運行 打開終端c ...
  • Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of the maze neglected to create a fire escape plan. Help J ...
  • 輸入輸出樣例 輸入樣例#1: 8 186 186 150 200 160 130 197 220 輸出樣例#1: 4 輸入樣例#1: 8 186 186 150 200 160 130 197 220 輸出樣例#1: 4 此題意在先升後降子序列,單調遞增子序列,單調遞減子序列當中找到最長的一組序列。 ...
  • 一丶約束 當我們編寫項目時會創建很多個類,來實現很多個功能,最後又需要把這些類都聯繫成一個,我們就需要來約束一下那些類中的方法,把需要聯繫的約束成一個方法. Email類繼承了BaseMessage,所以Email類中必須有send方法,否則就會報錯,我們用這樣的來約束類 編寫. 示例: class ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...