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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

十六、Struts2文件上传与下载

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十六、Struts2文件上传与下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 文件上傳與下載

    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數組

    ?

  • 單文件上傳

    開發步驟:

    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

    總結

    以上是生活随笔為你收集整理的十六、Struts2文件上传与下载的全部內容,希望文章能夠幫你解決所遇到的問題。

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