Struts2框架使用(十)之struts2的上傳和下載

Struts2? 文件上傳

首先是Struts2的上傳,Struts2 文件上傳是基于 Struts2 攔截器實現的,使用的是fileupload組件;

首先如果想要上傳文件,則需要在表單處添加?enctype="multipart/form-data" 屬性。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>文件上傳</h1>
<s:fielderror></s:fielderror>
<form action="upload" method="post" enctype="multipart/form-data">姓名:<input type="text" name="name" />文件:<input type="file" name="java1234"/><br/><input type="submit" value="提交"/>
</form>
<h1>多文件上傳</h1>
<s:fielderror></s:fielderror>
<form action="uploads" method="post" enctype="multipart/form-data">文件1:<input type="file" name="java1234"/><br/>文件2:<input type="file" name="java1234"/><br/>文件3:<input type="file" name="java1234"/><br/><input type="submit" value="提交"/>
</form>
</body>
</html>

然后在Action中獲取數據需要按照一定格式來獲取:

Struts2 獲取上傳文件:name (name 是文件表單的 name)
Struts2 獲取上傳文件名:name+FileName;
Struts2 獲取上傳文件的類型:name+ContentType;

import java.io.File;import org.apache.commons.io.FileUtils;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport{/*** 文件上傳*/private static final long serialVersionUID = 1L;private File java1234; // 文件private String java1234FileName;  // 文件名private String java1234ContentType;  // 文件類型private String name;@Overridepublic String execute() throws Exception {System.out.println("name=" + name);System.out.println("文件名:"+java1234FileName);System.out.println("文件類型:"+java1234ContentType);//這里寫的是存儲路徑String filePath="C:/"+java1234FileName;//根據路徑創建一個文件File saveFile=new File(filePath);//將上傳得到文件流復制到路徑所創建的文件上
        FileUtils.copyFile(java1234, saveFile);return SUCCESS;}

之后再struts.xml文件中配置Action即可,注意:這里的校驗,是先校驗package外的最大大小,一旦超過則拋出異常,不會進入到action中。

通過package外最大文件上傳校驗后,進入到action內部的攔截器校驗時,一旦攔截,則會返回個input字段。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!-- Struts2 最大文件上傳大小默認是 2M <constant name="struts.multipart.maxSize" value="20000000"></constant>--><package name="manager" extends="struts-default">    <action name="upload" class="com.mrlv.action.FileUploadAction"><result name="success">/success.jsp</result><result name="input">/fileupload.jsp</result><!-- 配置文件的大小及類型 --><!-- 允許后綴名為png,bmp,jpg,doc,xls的文件上傳<interceptor-ref name="fileUpload"><param name="allowedExtensions">  png,bmp,jpg,doc,xls  </param>  </interceptor-ref>--> <!-- 下面是限定文件類型以及文件大小 --><interceptor-ref name="fileUpload"><param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpg,image/jpeg,image/pjpeg</param><param name="maximumSize">81101</param></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref>         </action></package>
</struts>

?這里就是簡單的文件上傳了。如果是多文件上傳的話,只需要在Action中接收file的時候,創建數組類型即可。

?

Struts2? 文件下載

關于文件下載,返回的是文件流。

所以在創建Action的時,如下

package com.mrlv.action;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;import com.opensymphony.xwork2.ActionSupport;public class FileDownloadAction extends ActionSupport{/*** */private static final long serialVersionUID = 1L;private String fileName;//返回的是一個文件流public InputStream getInputStream() throws FileNotFoundException {//這里取得是下載文件的路徑File file = new File("C:/LX.txt");//給文件命名,中文可能回有點問題this.fileName = "LX.txt";//返回一個文件流return new FileInputStream(file);}public String getFileName() throws UnsupportedEncodingException {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}}

?

在struts.xml中的配置

<action name="download" class="com.mrlv.action.FileDownloadAction"><result type="stream"><!-- attachment這個參數,表示跟附件一樣,filename這個參數是下載文件名${fileName}通過get方法獲得 --><param name="contentDisposition">attachment;filename=${fileName}</param></result></action>

接下來在jsp頁面調用即可。

<a href="download">文件下載</a>

?

轉載于:https://www.cnblogs.com/lvshiyu/p/8086647.html

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

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

相關文章

module_param 用于動態開啟/關閉 驅動打印信息

1.定義模塊參數的方法: module_param(name, type, perm); 其中,name:表示參數的名字; type:表示參數的類型; perm:表示參數的訪問權限; type參數設定的類型和perm的訪問權限具體數值數值請參考內核定義。 2、可以在insmod&#xff08;裝載模塊&#xff09;的時候為參…

超鏈接href屬性_如何使用標簽上的HREF屬性制作HTML超鏈接

超鏈接href屬性A website is a collection of web pages. And these pages need to be linked or connected by something. And to do so, we need to use a tag provided by HTML: the a tag. 網站是網頁的集合。 這些頁面需要通過某種方式鏈接或連接。 為此&#xff0c;我們需…

劍指 Offer 42. 連續子數組的最大和

輸入一個整型數組&#xff0c;數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。 要求時間復雜度為O(n)。 示例1: 輸入: nums [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續子數組 [4,-1,2,1] 的和最大&#xff0c;為 6。 解題思路 對于一個數組&…

centos 7安裝配置vsftpd

yum install -y vsftpd #安裝vsftpd yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI #安裝vsftpd虛擬用戶配置依賴包 systemctl enable vsftpd.service #設置vsftpd開機啟動 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak #備份默認配置文…

amazeui學習筆記--css(基本樣式3)--文字排版Typography

amazeui學習筆記--css&#xff08;基本樣式3&#xff09;--文字排版Typography 一、總結 1、字體&#xff1a;amaze默認非 襯線字體&#xff08;sans-serif&#xff09; 2、引用塊blockquote和定義列表&#xff1a;引用塊blockquote和定義列表&#xff08;dl dt&#xff09;注意…

劍指 Offer 46. 把數字翻譯成字符串

給定一個數字&#xff0c;我們按照如下規則把它翻譯為字符串&#xff1a;0 翻譯成 “a” &#xff0c;1 翻譯成 “b”&#xff0c;……&#xff0c;11 翻譯成 “l”&#xff0c;……&#xff0c;25 翻譯成 “z”。一個數字可能有多個翻譯。請編程實現一個函數&#xff0c;用來計…

Zend?Guard?7?,?Zend?Guard?Loader處理PHP加密

環境&#xff1a;使用Zend Guard 7 軟件加密。 PHP 5.6 LNMP 一鍵安裝&#xff0c;PHP5.6Zend Guard Loader &#xff08;對應的版本文件&#xff09;是已經安裝好了&#xff0c;還要安裝 opcache.so ,直接在lnmp 安裝教程中有。因為自動安裝 的 版本并不對應&#xff0c;于…

qr碼是二維碼碼_如何使用QR碼進行有效的營銷和推廣

qr碼是二維碼碼Efficient means doing things right. Effective is about doing the right things.高效意味著做正確的事。 有效就是做正確的事。 I am an advocate for efficiency and effectiveness. There must be a more efficient way to share contact details other th…

ELK學習記錄三 :elasticsearch、logstash及kibana的安裝與配置(windows)

注意事項&#xff1a; 1.ELK版本要求5.X以上 2.Elasticsearch5.x版本必須基于jdk1.8&#xff0c;安裝環境必須使用jdk1.8 3.操作系統windows10作為測試環境&#xff0c;其他環境命令有差異&#xff0c;請注意 4.本教程適合完全離線安裝 5.windows版本ELK安裝包下載路徑&#xf…

【quickhybrid】JSBridge的實現

前言 本文介紹quick hybrid框架的核心JSBridge的實現 由于在最新版本中&#xff0c;已經沒有考慮iOS7等低版本&#xff0c;因此在選用方案時沒有采用url scheme方式&#xff0c;而是直接基于WKWebView實現 交互原理 具體H5和Native的交互原理可以參考前文的H5和Native交互原理 …

mongodb atlas_如何使用MongoDB Atlas將MERN應用程序部署到Heroku

mongodb atlas簡介 (Introduction to MERN) In this article, well be building and deploying an application built with the MERN stack to Heroku.在本文中&#xff0c;我們將構建和部署使用MERN堆棧構建的應用程序到Heroku。 MERN, which stands for MongoDB, Express, R…

面試題 10.02. 變位詞組

編寫一種方法&#xff0c;對字符串數組進行排序&#xff0c;將所有變位詞組合在一起。變位詞是指字母相同&#xff0c;但排列不同的字符串。 注意&#xff1a;本題相對原題稍作修改 示例: 輸入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”], 輸出: [ [“ate”,…

智能合約設計模式

2019獨角獸企業重金招聘Python工程師標準>>> 設計模式是許多開發場景中的首選解決方案&#xff0c;本文將介紹五種經典的智能合約設計模式并給出以太坊solidity實現代碼&#xff1a;自毀合約、工廠合約、名稱注冊表、映射表迭代器和提款模式。 1、自毀合約 合約自毀…

如何使用1Password,Authy和Privacy.com外包您的在線安全性

Take some work off your plate while beefing up security with three changes you can make today.通過今天可以進行的三項更改來增強安全性&#xff0c;同時省下一些工作。 Unstable times are insecure times, and we’ve already got enough going on to deal with. When…

「CodePlus 2017 12 月賽」火鍋盛宴

n<100000種食物&#xff0c;給每個食物煮熟時間&#xff0c;有q<500000個操作&#xff1a;在某時刻插入某個食物&#xff1b;查詢熟食中編號最小的并刪除之&#xff1b;查詢是否有編號為id的食物&#xff0c;如果有查詢是否有編號為id的熟食&#xff0c;如果有熟食刪除之…

5815. 扣分后的最大得分

給你一個 m x n 的整數矩陣 points &#xff08;下標從 0 開始&#xff09;。一開始你的得分為 0 &#xff0c;你想最大化從矩陣中得到的分數。 你的得分方式為&#xff1a;每一行 中選取一個格子&#xff0c;選中坐標為 (r, c) 的格子會給你的總得分 增加 points[r][c] 。 然…

您有一個上云錦囊尚未領取!

前期&#xff0c;我們通過文章《確認過眼神&#xff1f;上云之路需要遇上對的人&#xff01;》向大家詳細介紹了阿里云咨詢與設計場景下的五款專家服務產品&#xff0c;企業可以通過這些專家服務產品解決了上云前的痛點。那么&#xff0c;當完成上云前的可行性評估與方案設計后…

怎么從運營轉到前端開發_我如何在16個月內從銷售人員轉到前端開發人員

怎么從運營轉到前端開發On August 18, 2015, I was on a one-way flight headed to Copenhagen from Toronto Pearson Airport. I was starting my two semester exchange at the Copenhagen Business school. 2015年8月18日&#xff0c;我乘坐單程飛機從多倫多皮爾遜機場前往哥…

Python os.chdir() 方法

概述 os.chdir() 方法用于改變當前工作目錄到指定的路徑。 語法 chdir()方法語法格式如下&#xff1a; os.chdir(path) 參數 path -- 要切換到的新路徑。 返回值 如果允許訪問返回 True , 否則返回False。 實例 以下實例演示了 chdir() 方法的使用&#xff1a; #!/usr/bin/pyth…

oracle認證考試_Oracle云認證–通過此3小時免費課程通過考試

oracle認證考試This Oracle Cloud Certification exam will take – on average – about one week of study to prepare for. Most people who seriously commit to their studies are ready to pass the exam within about four days.這項Oracle Cloud認證考試平均需要大約一…