日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java post 多文件报头_Spring MVC-------文件上传,单文件,多文件,文件下载

發布時間:2025/3/15 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java post 多文件报头_Spring MVC-------文件上传,单文件,多文件,文件下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring MVC框架的文件上傳是基于 commons-fileupload 組件的文件上傳,只不過SpringMVC 框架在原有文件上傳組件上做了進一步封裝,簡化了文件上傳的代碼實現,取消了不同上傳組件上的編程差異。

commons-fileupload組件

由于 Spring MVC 框架的文件上傳是基于 commons-fileupload 組件的文件上傳,因此需要將 commons-fileupload 組件相關的 JAR(commons-fileupload-1.3.1.jar 和 commons-io-2.4.jar)復制到 Spring MVC 應用的 WEB-INF/lib 目錄下。下面講解如何下載相關 JAR 包。

Commons 是 Apache 開放源代碼組織中的一個Java子項目,該項目包括文件上傳、命令行處理、數據庫連接池、XML 配置文件處理等模塊。fileupload 就是其中用來處理基于表單的文件上傳的子項目,commons-fileupload 組件性能優良,并支持任意大小文件的上傳。

commons-fileupload 組件可以從“http://commons.apache.org/proper/commons-fileupload/”下載,本教程采用的版本是 1.2.2。下載它的 Binares 壓縮包(commons-fileupload-1.3.1-bin.zip),解壓縮后的目錄中有兩個子目錄,分別是 lib 和 site。

在 lib 目錄下有一個 JAR 文件——commons-fileupload-1.3.1.jar,該文件是 commons-fileupload 組件的類庫。在 site 目錄中是 commons-fileupload 組件的文檔,也包括 API 文檔。

commons-fileupload 組件依賴于 Apache 的另外一個項目——commons-io,該組件可以從“http://commons.apache.org/proper/commons-io/”下載,本教程采用的版本是 2.4。下載它的 Binaries 壓縮包(commons-io-2.4-bin.zip),解壓縮后的目錄中有 4 個 JAR 文件,其中有一個 commons-io-2.4.jar 文件,該文件是 commons-io 的類庫。

基于表單的文件上傳

標簽 會在瀏覽器中顯示一個輸入框和一個按鈕,輸入框可供用戶填寫本地文件的文件名和路徑名,按鈕可以讓瀏覽器打開一個文件選擇框供用戶選擇文件。

文件上傳的表單例子如下:

對于基于表單的文件上傳,不要忘記使用 enctype 屬性,并將它的值設置為 multipart/form-data,同時將表單的提交方式設置為 post。為什么要這樣呢?下面從 enctype 屬性說起。

表單的 enctype 屬性指定的是表單數據的編碼方式,該屬性有以下 3 個值。

application/x-www-form-urlencoded:這是默認的編碼方式,它只處理表單域里的 value 屬性值。

multipart/form-data:該編碼方式以二進制流的方式來處理表單數據,并將文件域指定文件的內容封裝到請求參數里。

text/plain:該編碼方式只有當表單的 action 屬性為“mailto:”URL 的形式時才使用,主要適用于直接通過表單發送郵件的方式。

由上面 3 個屬性的解釋可知,在基于表單上傳文件時 enctype 的屬性值應為 multipart/form-data。

MultipartFile接口

在 Spring MVC 框架中上傳文件時將文件相關信息及操作封裝到 MultipartFile 對象中,因此開發者只需要使用 MultipartFile 類型聲明模型類的一個屬性即可對被上傳文件進行操作。該接口具有如下方法。

名稱作用

byte[] getBytes()

以字節數組的形式返回文件的內容

String getContentType()

返回文件的內容類型

InputStream getInputStream()

返回一個InputStream,從中讀取文件的內容

String getName()

返回請求參數的名稱

String getOriginalFillename()

返回客戶端提交的原始文件名稱

long getSize()

返回文件的大小,單位為字節

boolean isEmpty()

判斷被上傳文件是否為空

void transferTo(File destination)

將上傳文件保存到目標目錄下

在上傳文件時需要在配置文件中使用 Spring 的 org.springframework.web.multipart.commons.CommonsMultipartResolver 類配置 MultipartResolver 用于文件上傳。

Spring MVC單文件上傳

1)創建應用并導入 JAR 包

創建應用 springMVCDemo11,將SpringMVC 相關的 JAR 包、commons-fileupload 組件相關的 JAR 包以及 JSTL相關的 JAR 包導入應用的 lib 目錄中,如圖 1 所示。

圖 1??springMVCDemo11

2)創建 web.xml 文件

在 WEB-INF 目錄下創建 web.xml 文件。為防止中文亂碼,需要在 web.xml 文件中添加字符編碼過濾器,這里不再贅述。

3)創建文件選擇頁面

在 WebContent 目錄下創建JSP頁面 oneFile.jsp,在該頁面中使用表單上傳單個文件,具體代碼如下:

Insert title here選擇文件:
文件描述:

4)創建 POJO 類

在 src 目錄下創建 pojo 包,在該包中創建 POJO 類 FileDomain。然后在該 POJO 類中聲明一個 MultipartFile 類型的屬性封裝被上傳的文件信息,屬性名與文件選擇頁面 oneFile.jsp 中的 file 類型的表單參數名 myfile 相同。具體代碼如下:

package pojo;

import org.springframework.web.multipart.MultipartFile;public classFileDomain {privateString description;privateMultipartFile myfile;publicString getDescription() {returndescription;

}public voidsetDescription(String description) {this.description =description;

}publicMultipartFile getMyfile() {returnmyfile;

}public voidsetMyfile(MultipartFile myfile) {this.myfile =myfile;

}

}

5)創建控制器類

在 src 目錄下創建 controller 包,并在該包中創建 FileUploadController 控制器類。具體代碼如下:

package controller;

import java.io.File;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import pojo.FileDomain;

@Controllerpublic classFileUploadController {//得到一個用來記錄日志的對象,這樣在打印信息時能夠標記打印的是哪個類的信息

private static final Log logger = LogFactory.getLog(FileUploadController.class);/**

* 單文件上傳*/@RequestMapping("/onefile")publicString oneFileUpload(@ModelAttribute FileDomain fileDomain,

HttpServletRequest request) {/** 文件上傳到服務器的位置“/uploadfiles”,該位置是指

* workspace\.metadata\.plugins\org.eclipse

* .wst.server.core\tmp0\wtpwebapps, 發布后使用*/String realpath=request.getServletContext()

.getRealPath("uploadfiles");

String fileName=fileDomain.getMyfile().getOriginalFilename();

File targetFile= newFile(realpath, fileName);if (!targetFile.exists()) {

targetFile.mkdirs();

}//上傳

try{

fileDomain.getMyfile().transferTo(targetFile);

logger.info("成功");

}catch(Exception e) {

e.printStackTrace();

}return "showOne";

}

}

6)創建 Spring MVC 的配置文件

在上傳文件時需要在配置文件中使用 Spring 的 CommonsMultipartResolver 類配置 MultipartResolver 用于文件上傳,應用的配置文件 springmvc-servlet.xml 的代碼如下:

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

7)創建成功顯示頁面

在 WEB-INF 目錄下創建 JSP 文件夾,并在該文件夾中創建單文件上傳成功顯示頁面 showOne.jsp。具體代碼如下:

Insert title here

${fileDomain.myfile.originalFilename }

8)測試文件上傳

發布 springMVCDemo11 應用到 Tomcat 服務器并啟動 Tomcat 服務器,然后通過地址“http://localhost:8080/springMVCDemo11/oneFile.jsp”運行文件選擇頁面,運行結果如圖 2 所示。

圖 2??單文件選擇頁面

在圖 2 中選擇文件并輸入文件描述,然后單擊“提交”按鈕上傳文件,若成功則顯示如圖 3 所示的結果。

圖 3??單文件成功上傳結果

Spring MVC多文件上傳

1)創建多文件選擇頁面

在 WebContent 目錄下創建JSP頁面 multiFiles.jsp,在該頁面中使用表單上傳多個文件,具體代碼如下:

Insert title here選擇文件1:
文件描述1:
選擇文件2:
文件描述2:
選擇文件3:
文件描述3:

2)創建 POJO 類

在上傳多文件時需要 POJO 類 MultiFileDomain 封裝文件信息,MultiFileDomain 類的具體代碼如下:

package pojo;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;public classMultiFileDomain {private Listdescription;private ListmyFile;//省略setter和getter方法

}

3)添加多文件上傳處理方法

在控制器類 FileUploadController 中添加多文件上傳的處理方法 multiFileUpload,具體代碼如下:

/**

* 多文件上傳*/@RequestMapping("/multifile")publicString multiFileUpload(@ModelAttribute MultiFileDomain multiFileDomain,HttpServletRequest request) {

String realpath= request.getServletContext().getRealPath("uploadfiles");

File targetDir= newFile(realpath);if (!targetDir.exists()) {

targetDir.mkdirs();

}

List files =multiFileDomain.getMyFile();for (int i = 0; i < files.size(); i++) {

MultipartFile file= files.get(i);

String fileName=file.getOriginalFilename();

File targetFile= newFile(realpath, fileName);//上傳

try{

file.transferTo(targetFile);

}catch(Exception e) {

e.printStackTrace();

}

}

logger.info("成功");return "showMulti";

}

4)創建成功顯示頁面

在 JSP 文件夾中創建多文件上傳成功顯示頁面 showMulti.jsp,具體代碼如下:

Insert title here
詳情文件名
${description}${multiFileDomain.myfile[loop.count-1].originalFilename}

5)測試文件上傳

發布 springMVCDemo11 應用到 Tomcat 服務器并啟動 Tomcat 服務器,然后通過地址“http://localhost:8080/springMVCDemo11/multiFiles.jsp”運行多文件選擇頁面,運行結果如圖 1 所示。

圖 1??多文件選擇頁面

在圖 1 中選擇文件并輸入文件描述,然后單擊“提交”按鈕上傳多個文件,若成功則顯示如圖 2 所示的結果。

圖 2??多文件成功上傳結果

Spring MVC文件下載

文件下載的實現方法

實現文件下載有以下兩種方法:

通過超鏈接實現下載。

利用程序編碼實現下載。

通過超鏈接實現下載固然簡單,但暴露了下載文件的真實位置,并且只能下載存放在 Web 應用程序所在的目錄下的文件。

利用程序編碼實現下載可以增加安全訪問控制,還可以從任意位置提供下載的數據,可以將文件存放到 Web 應用程序以外的目錄中,也可以將文件保存到數據庫中。

利用程序實現下載需要設置兩個報頭:

1)Web 服務器需要告訴瀏覽器其所輸出內容的類型不是普通文本文件或 HTML 文件,而是一個要保存到本地的下載文件,這需要設置 Content-Type 的值為 application/x-msdownload。

2)Web 服務器希望瀏覽器不直接處理相應的實體內容,而是由用戶選擇將相應的實體內容保存到一個文件中,這需要設置 Content-Disposition 報頭。

該報頭指定了接收程序處理數據內容的方式,在 HTTP 應用中只有 attachment 是標準方式,attachment 表示要求用戶干預。在 attachment 后面還可以指定 filename 參數,該參數是服務器建議瀏覽器將實體內容保存到文件中的文件名稱。

設置報頭的示例如下:

response.setHeader("Content-Type", "application/x-msdownload");

response.setHeader("Content-Disposition", "attachment;filename="+filename);

文件下載的過程

下面繼續通過 springMVCDemo11 應用講述利用程序實現下載的過程,要求從《Spring MVC單文件上傳》上傳文件的目錄(workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\springMVCDemo11\uploadfiles)中下載文件,具體開發步驟如下:

1)編寫控制器類

首先編寫控制器類 FileDownController,在該類中有 3 個方法,即 show、down 和 toUTF8String。其中,show 方法獲取被下載的文件名稱;down 方法執行下載功能;toUTF8String 方法是下載保存時中文文件名的字符編碼轉換方法。

FileDownController 類的代碼如下:

package controller;

import java.io.File;

import java.io.FileInputStream;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

@Controllerpublic classFileDownController {//得到一個用來記錄日志的對象,在打印時標記打印的是哪個類的信息

private static final Log logger =LogFactory

.getLog(FileDownController.class);/**

* 顯示要下載的文件*/@RequestMapping("showDownFiles")publicString show(HttpServletRequest request, Model model) {//從 workspace\.metadata\.plugins\org.eclipse.wst.server.core\//tmp0\wtpwebapps\springMVCDemo11\下載

String realpath =request.getServletContext()

.getRealPath("uploadfiles");

File dir= newFile(realpath);

File files[]=dir.listFiles();//獲取該目錄下的所有文件名

ArrayList fileName = new ArrayList();for (int i = 0; i < files.length; i++) {

fileName.add(files[i].getName());

}

model.addAttribute("files", fileName);return "showDownFiles";

}/**

* 執行下載*/@RequestMapping("down")publicString down(@RequestParam String filename,

HttpServletRequest request, HttpServletResponse response) {

String aFilePath= null; //要下載的文件路徑

FileInputStream in = null; //輸入流

ServletOutputStream out = null; //輸出流

try{//從workspace\.metadata\.plugins\org.eclipse.wst.server.core\//tmp0\wtpwebapps下載

aFilePath = request.getServletContext().getRealPath("uploadfiles");//設置下載文件使用的報頭

response.setHeader("Content-Type", "application/x-msdownload");

response.setHeader("Content-Disposition", "attachment; filename="

+toUTF8String(filename));//讀入文件

in = new FileInputStream(aFilePath + "\\" +filename);//得到響應對象的輸出流,用于向客戶端輸出二進制數據

out =response.getOutputStream();out.flush();int aRead = 0;byte b[] = new byte[1024];while ((aRead = in.read(b)) != -1 & in != null) {out.write(b, 0, aRead);

}out.flush();in.close();out.close();

}catch(Throwable e) {

e.printStackTrace();

}

logger.info("下載成功");return null;

}/**

* 下載保存時中文文件名的字符編碼轉換方法*/

publicString toUTF8String(String str) {

StringBuffer sb= newStringBuffer();int len =str.length();for (int i = 0; i < len; i++) {//取出字符中的每個字符

char c =str.charAt(i);//Unicode碼值為0~255時,不做處理

if (c >= 0 && c <= 255) {

sb.append(c);

}else { //轉換 UTF-8 編碼

byteb[];try{

b= Character.toString(c).getBytes("UTF-8");

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

b= null;

}//轉換為%HH的字符串形式

for (int j = 0; j < b.length; j++) {int k =b[j];if (k < 0) {

k&= 255;

}

sb.append("%" +Integer.toHexString(k).toUpperCase());

}

}

}returnsb.toString();

}

}

2)創建文件列表頁面

下載文件示例需要一個顯示被下載文件的JSP頁面 showDownFiles.jsp,代碼如下:

Insert title here
被下載的文件名

${filename}

總結

以上是生活随笔為你收集整理的java post 多文件报头_Spring MVC-------文件上传,单文件,多文件,文件下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。