十六、Struts2文件上傳與下載

  1. 文件上傳與下載

    1.文件上傳前提:<form action="${pageContext.request.contextPath}/*" method="post" enctype="multipart/form-data">

    2.動作類中字段需要符合命名規范

    ????表單字段名:image

    ????動作類:File image;

    ???? String imageFileName; 文件名

    ???????????? String imageContentType;文件的MIME類型

    3.上傳攔截器參數的配置

    文件大小、文件類型限制等

    錯誤消息提示:中文????

    4.多文件上傳:File或者List數組

    ?

  2. 單文件上傳

    開發步驟:

    Jsp代碼:

    <br/> ----單文件上傳----<br/>

    <s:form action="uploadOneAction" enctype="multipart/form-data">

    ????????<s:textfield name="username" label="姓名"></s:textfield>

    ????????<s:file name="photo" label="相片"></s:file>

    ????????<s:submit value="上傳"></s:submit>

    </s:form>

    ?

    Struts.xml文件配置代碼:

    <package name="p1" extends="struts-default">

    ????????<action name="uploadOneAction" class="com.itheima.action.UploadAction1">

    ????????????<result>/success.jsp</result>

    ????????</action>

    </package>

    ?

    動作類代碼:

    public class UploadAction1 extends ActionSupport {

    ????// 變量命名需與表單名稱保持一致

    ????private String username;

    ????// 與表單字段對應,必須是java.io.File類型的

    ????private File photo;

    ????// 上傳的文件名,格式:上傳字段+FileName

    ????private String photoFileName;

    ????// 上傳文件MIME類型,格式:上傳字段名+ContentType

    ????private String photoContentType;

    ?

    ????public String execute() throws Exception {

    ????????// 打印相關字段屬性

    ????????System.out.println(username);

    ????????System.out.println(photo);

    ????????System.out.println(photoFileName);

    ????????System.out.println(photoContentType);

    ????????/*

    ???????? * 上傳文件步驟:

    ???????? * 1.得到上傳文件的真實路徑

    ???????? * 2.構建輸入流

    ???????? * 3.構建輸出流

    ???????? */

    ????????// 1.得到上傳文件的真實路徑

    //上傳字段:上傳到某個文件夾。存到應用的files目錄下

    ????????String storeDir = ServletActionContext.getServletContext().getRealPath(

    ????????????????"files");

    ????????// 把上傳過來的文件,重寫創建一個文件

    ????????File file = new File(storeDir, photoFileName);

    ?

    ????????/*

    ????????// 以前復制文件的方式

    ???????? * 但是現在呢?我們不需要這么做啦,Struts2都幫我們封裝了

    ????????InputStream in = new FileInputStream(photo);

    ????????OutputStream out = new FileOutputStream(file);

    ?

    ????????int len = 0;

    ????????byte[] bys = new byte[1024];

    ????????while ((len = in.read(bys)) != -1) {

    ????????????out.write(bys, 0, len);

    ????????}

    ????????in.close();

    ????????out.close();

    ????????*/

    ????????FileUtils.copyFile(photo, file);

    ????????return SUCCESS;

    ????}

    }

    2、多文件上傳

    將文件類型定義為:List 或者File數組

    Jsp代碼:

    <br>-----多文件上傳-----<br>

    <form action="${pageContext.request.contextPath}/upload2.action" method="post" enctype="multipart/form-data">

    ????用戶名:<input type="text" name="username"/><br/>

    ????靚照:<input type="file" name="photo"/><br/>

    ????靚照:<input type="file" name="photo"/><br/>

    ????<input type="submit" value="上傳"/>

    </form>

    ?

    Struts.xml文件配置代碼:

    <action name="upload2" class="com.itheima.actions.UploadAction2" method="upload">

    <!-- ????????????<interceptor-ref name="defaultStack"> -->

    <!-- ????????????????<param name="fileUpload.allowedTypes">image/jpeg,image/png</param> -->

    <!-- ????????????????<param name="fileUpload.allowedExtensionsSet">jpg,jpeg,png</param> -->

    <!-- ????????????</interceptor-ref> -->

    ????????????<result>/success.jsp</result>

    ????????????<result name="error">/error.jsp</result>

    ????????????<result name="input">/indexMulti.jsp</result>

    ????????</action>

    ?

    動作類代碼:

    //文件上傳:fileUpload攔截器完成的

    public class UploadAction2 extends ActionSupport {

    ????

    ????private String username;

    ????private File[] photo;//和表單的上傳字段名保持一致。類型是File類型的 .數組或List

    ????private String[] photoFileName;//上傳的文件名

    ????private String[] photoContentType;//上傳文件的MIME類型

    ????public String upload(){

    ????????//上傳字段:上傳到某個文件夾。存到應用的images目錄下

    ????????String realPath = ServletActionContext.getServletContext().getRealPath("/images");

    ????????File directory = new File(realPath);

    ????????if(!directory.exists()){

    ????????????directory.mkdirs();

    ????????}

    ????????try {

    ????????????for(int i=0;i<photo.length;i++){

    ????????????????FileUtils.copyFile(photo[i], new File(directory, photoFileName[i]));

    ????????????}

    ????????????return SUCCESS;

    ????????} catch (IOException e) {

    ????????????e.printStackTrace();

    ????????????return ERROR;

    ????????}

    ????}

    }

    ?

    ?

    ?

    3、原理分析:

    a、是由一個攔截器來完成的。fileUpload

    可以通過配置攔截器的參數,指定攔截的擴展名或文件的MIME類型

    <action name="uploadOneAction" class="com.itheima.action.UploadAction1">

    ????????????<interceptor-ref name="defaultStack">

    ????????????<!--對已有的攔截器注入參數 -->

    ????????????<param name="fileUpload.allowedExtensions">txt</param>

    ????????????</interceptor-ref>

    ????????????<result>/success.jsp</result>

    </action>

    ?

    b、超出大小或非法文件的上傳,會報錯(轉向一個input的視圖)

    ?

    通過:

    <s:actionError/> <s:feildError/>顯示錯誤消息的提示

    c、錯誤消息提示改為中文版:借助國際化的消息資源文件

    ?

    如果是通過配置全局默認參數引起的錯誤,最好用全局的消息資源文件。

    ?

    ?

    struts2默認的提示資源文件:struts2-core-**.jar 的org.apache.struts2的struts-message.properties文件中。比著key值覆蓋對應的value即可。

    4、文件下載

    原理:是一個結果類型來處理的。stream

    ?

    編碼步驟:

    動作類:

    public class DownloadAction extends ActionSupport {

    ????// 文件下載用到的輸入流

    ????private InputStream imageFileIn;

    ????// 記住下載文件的文件名

    ????private String fileName;

    ?

    ????public String download1() throws Exception {

    ????????// 給輸入流賦值即可

    ????????String realPath = ServletActionContext.getServletContext().getRealPath(

    ????????????????"/file/mm.jpg");

    ????????// c:\apacher\file\4.jpg

    ????????fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);

    ????????// 解決中文名稱亂碼文件

    ????????fileName = URLEncoder.encode(fileName, "UTF-8");

    ????????imageFileIn = new FileInputStream(realPath);

    ????????return SUCCESS;

    ????}

    }

    ?

    struts.xml配置文件:主要是對stream類型的結果進行配置

    <action name="download1" class="com.itheima.action.DownloadAction" method="download1">

    ????????????<result type="stream">

    ????????????????<!--動作類中InputStream的字段名 -->

    ????????????????<param name="inputName">imageFileIn</param>

    ????????????????<!-- 告知瀏覽器響應頭:文件的MIME類型 -->

    ????????????????<param name="contentType">application/octet-stream</param>

    ????????????????<!--告訴瀏覽器下載的方式 -->

    ????????????????<!-- 使用OGNL表達式獲取動作類中的屬性 -->

    ????????????????<param name="contentDisposition">attachment;filename=${fileName}</param>

    ????????????</result>

    </action>

    ?

轉載于:https://www.cnblogs.com/Prozhu/p/5886462.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286145.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286145.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286145.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言試題四十三之求出ss所指字符串中指定字符的個數,并返回此值。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

《Matlab實用案例》系列Matlab從入門到精通實用100例案例教程目錄(持續更新)

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 2. 專欄地址 「 劉一哥與GIS的故事 」之《Matlab使用案例》 3. 專欄目錄 【MATLAB統計分析與應用100例】案例001&#xff1a;matlab使用Importdata函數導入文本txt數據【MATLAB統計分析與應用100例】案例002&#xff…

Quartz2 定時器 《一》(概述)

為什么80%的碼農都做不了架構師&#xff1f;>>> Quartz2 說白了&#xff0c;就是個功能比較完善的定時器&#xff0c;可以通過指定的時間執行指定的任務。 應用范圍 a.比如讓商城的活動&#xff08;對象&#xff09;在指定的時間&#xff08;定時&#xff0…

SQL 數據庫遠程備份 語句

DECLARE DATABakPath VARCHAR(200) N\\192.168.0.22\DataBak --遠程共享目錄&#xff08;備份文件夾根目錄&#xff09; DECLARE UserName VARCHAR(50) N192.168.0.22\dbuser --遠程目錄訪問用戶賬戶 DECLARE UserPwd VARCHAR(50) N123456 --遠程目錄訪問用戶密碼 DECLARE R…

九、為影院添加影片《仿淘票票系統前后端完全制作(除支付外)》

一、數據獲取 首先打開在線編輯器進入我們的項目&#xff1a;https://editor.ivx.cn/ 上一節已展示了影院頁&#xff0c;但是你點擊影院頁進入后將看不到任何數據&#xff0c;這是因為當前影院還未有添加的影片&#xff0c;本節之后將會從頁面開始完成這個功能。 首先我們應…

大話領域驅動設計——基礎設施層

概述基礎設施層是整個系統的?持層&#xff0c;通過對第三?類庫的調?或系統的抽象和集成來實現對其他層的?持。與傳統架構不同在DDD中&#xff0c;數據庫訪問的具體實現&#xff08;倉儲&#xff09;也被放在了基礎設施層。在DDD的理念中&#xff0c;基礎設施層是為領域和用…

C語言試題四十四之移動一維數組中的內容,若數組中由n個整數,要求把下標從0到p(p小于等于n-1)的數組元素平移到數組的最后。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

【MATLAB統計分析與應用100例】案例004:matlab調用smoothts函數對金融時間序列數據進行平滑處理

時間序列數據進行平滑處理效果預覽: Excel原數據部分預覽: 1. 讀取金融時間序列數據,繪制波形圖 x = xlsread(examp03_02.xls); % 從文件examp03_02.xls中讀取數據 price = x(:,4)

javaweb優化

http://blog.csdn.net/jiangzhaobao/article/details/8003244轉載于:https://www.cnblogs.com/yzjT-mac/p/5889292.html

MultiProcess-MultiThread

聽到一些關于python多進程與多線的例子&#xff0c;感覺比較經典&#xff0c;把一些例子分享一下. 內容如下&#xff1a; Process、Thread、GIL、Process fork、Multiprocessing、Queue、ProcessPool、Multiprocess-Multithread comparison (1) Process : 程序的一次執行(程序編…

【MATLAB統計分析與應用100例】案例005:matlab調用medfilt1函數對加噪正弦波信號進行平滑處理

平滑效果預覽: 文章目錄 1. 產生加噪正弦波信號,繪制加噪波形圖2. 調用medfilt1對加噪正弦波信號y進行中值濾波,并繪制波形圖1. 產生加噪正弦波信號,繪制加噪波形圖 t = linspace(0,2*pi,500); % 產生一個從0到2

十、為影院添加影片及座位安排《仿淘票票系統前后端完全制作(除支付外)》

一、選中添加功能完成 首先打開在線編輯器進入我們的項目&#xff1a;https://editor.ivx.cn/ 在上一節咱們已經完成了對應的準備工作&#xff0c;在這一節中&#xff0c;咱們只需要對其進行調用即可&#xff0c;調用前還需要處理這些數據&#xff1a; 首先選中時&#xff0…

遍歷文件夾還原數據庫SQL語句

/***** 遍歷文件夾進行數據庫還原 *******/---需要開啟xp_cmdshell 如已經開啟 可以略過 /***** Step 1 開啟 xp_cmdshell Use Master GO EXEC master.dbo.sp_configure show advanced options, 1 RECONFIGURE WITH OVERRIDE GO EXEC master.dbo.sp_configure xp_cmdshell, 1…

聊聊 C# 和 C++ 中的 泛型模板 底層玩法

最近在看 C 的方法和類模板&#xff0c;我就在想 C# 中也是有這個概念的&#xff0c;不過叫法不一樣&#xff0c;人家叫模板&#xff0c;我們叫泛型&#xff0c;哈哈&#xff0c;有點意思&#xff0c;這一篇我們來聊聊它們底層是怎么玩的&#xff1f;一&#xff1a;C 中的模板玩…

ceph集群報 Monitor clock skew detected 錯誤問題排查,解決

ceph集群報 Monitor clock skew detected 錯誤問題排查&#xff0c;解決 告警信息如下&#xff1a; [rootceph-100-80 ceph]# ceph -w cluster ddc1b10b-6d1a-4ef9-8a01-d561512f3c1d health HEALTH_WARN clock skew detected on mon.ceph-100-81,…

Java實現畫八卦

八卦是由多個圓疊加而成&#xff0c;如果我們讓每個圓都有自己的顏色&#xff0c;那么具體結構便一目了然&#xff0c;如下圖所示&#xff1a; 顯然只要令對應的圓顏色相同&#xff0c;就能達到我們預期的效果。 用Java就能輕松畫出來&#xff1a; import java.awt.BasicStroke…

C語言試題四十五之把第1到第p個字符,平移到字符串的最后,把第p+1到最后的字符移到字符串的前部。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫一個…

【MATLAB統計分析與應用100例】案例006:matlab數據的標準化變換

文章目錄 1. 調用rand函數產生一個10行,4列的隨機矩陣,每列服從不同的均勻分布2. 調用zscore函數對x進行標準化變換(按列標準化),返回變換后矩陣xz,以及矩陣x各列的均值構成的向量mu,各列的標準差構成的向量sigma3. 變換結果1. 調用rand函數產生一個10行,4列的隨機矩陣…

十一、為影院添加影片制作準備服務《仿淘票票系統前后端完全制作(除支付外)》

一、為影院添加影片的邏輯和思考 首先打開在線編輯器進入我們的項目&#xff1a;https://editor.ivx.cn/ 進入之后找到上一節中制作的頁面&#xff0c;咱們設置點擊編輯按鈕后進入的頁面為影院添加影片頁&#xff1a; 接著咱們查看影院添加影片頁&#xff1a; 在該頁中&…

Linux 內核中斷內幕【轉】

轉自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文對中斷系統進行了全面的分析與探討&#xff0c;主要包括中斷控制器、中斷分類、中斷親和力、中斷線程化與 SMP 中的中斷遷徙等。首先對中斷工作原理進行了簡要分析&#xff0c;接著詳細探討了中斷親…