struts2實現檔案上傳與下載
一、單檔案上傳
1、檔案上傳條件:
(1)請求方法必須是post
(2)enctype的屬性值必須為multipart/form-data
(3)提供一個檔案選擇域
2、檔案上傳jsp程式碼
<%@ 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>上傳</title>
</head>
<body>
<s:actionerror/>
<s:form action="upload.action" enctype="multipart/form-data">
<s:textfield name="userName" label="使用者名稱" />
<s:file name="photo" label="照片"/>
<s:submit value="上傳"/>
</s:form>
</body>
</html>
3、檔案上傳編寫動作類注意:
(1)struts2提供的上傳檔名命名規則:上傳的欄位名(form表單中的)+fileName
(2)struts2提供MIME型別命名規則:上傳的欄位名(form表單中的)+contentType
(3)沒有使用模型驅動時:form表單提供的屬性和struts2提供的屬性要生成set和get方法
4、上傳檔案動作類程式碼
package com.san.action;
import java.io.File;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Upload extends ActionSupport{
private static final long serialVersionUID = 1L;
//表單提供的屬性
private String userName;
private File photo;
//struts2在檔案上傳時提供的屬性
private String photoFileName;//上傳的檔名(上傳的欄位名+fileName)
private String photoContentType;//上傳檔案的MIME型別(上傳的欄位名+contentType)
public String upload(){
//1、拿到servletContext
ServletContext application=ServletActionContext.getServletContext();
//String filePath=application.getRealPath("/WEB-INF/files");
//2、呼叫realPath方法,獲取一個虛擬目錄而得到一個真實的目錄
String filePath=application.getRealPath("/WEB-INF/files");
File file=new File(filePath);
//3、如果真實目錄不存在則建立
if(!file.exists()){
file.mkdirs();
}
//4、把photo存過去
photo.renameTo(new File(file,photoFileName));
return null;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public File getPhoto() {
return photo;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public String getPhotoFileName() {
return photoFileName;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public String getPhotoContentType() {
return photoContentType;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
}
5、編寫struts.xml配置檔案注意:
(1)上傳檔案預設為2兆,修改上傳限制時,value的值應該是算出來的,不能寫成這種形式1024*1024*5(修改為5兆)
(2)限制檔案的副檔名時,如果有多個限制條件用逗號隔開
(3)限制檔案的MIME時,如果有多個條件時用逗號隔開;jpg形式的圖片寫成jpeg不能寫成jpg
6、struts.xml程式碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 開啟靜態方法呼叫 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<!-- 設定開發者模式 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 限制檔案上傳的大小 (預設為2兆)-->
<constant name="struts.multipart.maxSize" value="5242880"></constant>
<!-- 配置全域性訊息資源包,解決英文問題 -->
<constant name="struts.custom.i18n.resources" value="fileupload_message"></constant>
<package name="p1" extends="struts-default">
<!-- 上傳1 -->
<action name="upload" class="com.san.action.Upload" method="upload">
<!-- 限制檔案的副檔名,如果有多個限制條件用逗號隔開
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">jpg</param>
</interceptor-ref>
-->
<!-- 限制檔案的MIME,如果有多個檔案時使用逗號隔開 -->
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedTypes">image/jpeg</param>
</interceptor-ref>
<result name="input">upload.jsp</result>
</action>
</package>
</struts>
7、將不符合條件的上傳的英文提示改為中文提示
(1)建立一個properties檔案
struts.messages.error.content.type.not.allowed=\u8F93\u5165\u6B63\u786E\u7684\u5404\u5F0F\: {0} "{1}" "{2}" {3}
(2)struts.xml中,配置全域性資源包
<!--value為properties檔案的名字-->
<constant name="struts.custom.i18n.resources" value="fileupload_message"></constant>
(3)效果如下:
二、多檔案上傳
1、只需要修改動作類中程式碼,其他的不變;程式碼如下
private String userName;
private File[] photo;
//struts2提供的兩個屬性
private String[] photoFileName;//檔名(表單欄位屬性+fileName)
private String[] photoContentType;//檔案MIME屬性
public String upload2(){
ServletContext application=ServletActionContext.getServletContext();
//獲取路徑
String filePath=application.getRealPath("/WEB-INF/files2");
//判斷路徑是否存在
File file=new File(filePath);
if(!file.exists()){
//路徑不存在時,建立
file.mkdirs();
}
//遍歷把檔案剪下到建立的檔案中
for(int i=0;i<photo.length;i++){
photo[i].renameTo(new File(file,photoFileName[i]));
}
return null;
}
三、檔案下載
1、檔案下載的struts.xml配置程式碼
<package name="p2" extends="struts-default">
<action name="download" class="com.san.action.Download" method="download">
<!--stream型別:直接向頁面輸出二進位制資料 -->
<result name="success" type="stream">
<!-- 給stream結果檢視注入引數:Content-Type -->
<param name="contentType">application/octet-stream</param>
<!-- 告知瀏覽器一什麼方式開啟 ${@[email protected](filename,"UTF-8")}-->
<param name="contentDisposition">attachment;filename=1.jpg</param>
<!-- 注入位元組流,取值要寫動作類中的set方法名稱,首字母改成小寫 -->
<param name="inputName">inputStream</param>
</result>
</action>
</package>
2、檔案下載的動作類程式碼
package com.san.action;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Download extends ActionSupport{
private static final long serialVersionUID = 1L;
//指定InputStream的名稱時,不能使用in
private InputStream inputStream;
//建立一個檔名屬性
private String filename;
public String download() throws Exception{
//1、找到檔案儲存位置
String filePath=ServletActionContext.getServletContext().getRealPath("/WEB-INF/files/1.jpg");
//2、把檔案讀入到InputStream流中
inputStream=new FileInputStream(filePath);
//3、給檔名賦值
filename="照片.jpg";
return SUCCESS;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}
相關推薦
struts2實現檔案上傳與下載功能
一、Demo介紹 基於struts2框架,實現多檔案的上傳和下載功能。 實現原理圖: 部分介面圖: 上傳成功及下載頁面: 二、主要程式碼 uploadFile.jsp:在form表單中包含一個文字框(上傳使用者的姓名)和兩個檔案上傳選項. <%@
struts2實現檔案上傳與下載
一、單檔案上傳 1、檔案上傳條件: (1)請求方法必須是post (2)enctype的屬性值必須為multipart/form-data (3)提供一個檔案選擇域 2、檔案上傳jsp程式碼 <%@ page language="java" c
Struts2之檔案上傳與下載
1、檔案上傳三種方式: 將檔案以二進位制的形式儲存到資料庫中 activiti工作流框架 將檔案儲存到專門檔案伺服器(存放檔案用的Linux系統)中 直接將檔案儲存到伺服器(tomcat所在伺服器)中 2、檔案上傳的一個例項: action裡
Http伺服器實現檔案上傳與下載(二)
一、引言 歡迎大家接著看我的部落格,如何大家有什麼想法的話回覆我哦,閒話不多聊了,接著上一講的內容來說吧,在上一節中已經講到了請求頭字串的解析,並且在解析中我我們已經獲取了url。就是上節中提到的/doing。當瀏覽器傳送了/doing請求後,這是的與伺服器的連線並沒有
Http伺服器實現檔案上傳與下載(五)
一、引言 歡迎大家和我一起編寫Http伺服器實現檔案的上傳和下載,現在我回顧一下在上一章節中提到的一些內容,之前我已經提到過檔案的下載,在檔案的下載中也提到了檔案的續下載只需要在響應頭中填寫Content-Range這一欄位,並且伺服器的檔案指標指向讀取的指定
Http伺服器實現檔案上傳與下載(一)
一、引言 大家都知道web程式設計的協議就是http協議,稱為超文字傳輸協議。在J2EE中我們可以很快的實現一個Web工程,但在C++中就不是非常的迅速,原因無非就是底層的socket網路編寫需要自己完成,上層的http協議需要我們自己完成,使用者介面需要我們自己完
Http伺服器實現檔案上傳與下載(三)
一、引言 在前2章的內容基本上已經講解了整個的大致流程。在設計Http伺服器時,我設計為四層的結構,最底層是網路傳輸層,就是socket程式設計。接著一層是請求和響應層,叫做Request和Response。在上一層是URL解析流程走向層。最頂層我設計為索引層。這一層主要多檔案時對檔案進行記憶體上的索引
Http伺服器實現檔案上傳與下載(四)
一、引言 歡迎大家來到和我一起編寫Http伺服器實現檔案的上傳和下載,現在我稍微回顧一下之前我說的,第一、二章說明說明了整體的HTTP走向,第三章實現底層的網路程式設計。接著這一章我想給大家講的是請求獲取,和響應傳送的內容。這裡主要講解的響應內容,為什麼?因為我們編寫的是一個與瀏覽器互動的HTTP伺服器
JAVA通訊(1)-- 使用Socket實現檔案上傳與下載
客戶端 /** * 檔案上傳客戶端 * * @author chen.lin * */ public class UploadClient extends JFrame { /** * */ priva
使用jsp/servlet簡單實現檔案上傳與下載
public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
Spring 實現檔案上傳與下載
檔案上傳 upload.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="
七、Struts2之檔案上傳與下載
一、Struts2檔案上傳 Struts2的檔案上傳實現非常簡單,只需要簡單幾步就可完成; 注意: (1)檔案上傳的struts2標籤為:<s:file name="" label="上傳"/> (2)檔案上傳的前提是表單屬性method="post" e
java實現檔案上傳與下載
東風化宇,檔案上傳 一、對於檔案上傳,瀏覽器在上傳的過程中是將檔案以流的形式提交到伺服器端的,Servlet獲取上傳檔案的輸入流然後再解析裡面的請求引數是比較麻煩。 JSP程式碼,POST請求,表單必須設定為enctype="multipar
Struts2實現單檔案上傳,多檔案上傳與下載(十)
“兩個蝴蝶飛”特別喜歡"java1234知識分享網"小峰的實用主義,所以本文及其系列文章均是採用實用主義,從專案和程式碼的角度去分析。由於本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。特別感謝"java12
struts2 檔案上傳與下載
檔案上傳: 三種上傳方案 虛擬路徑與真實路徑 /upload copyFile與copydirectory 檔案上傳的三種方案 1.將上傳的檔案以二進位制的形式存放到資料庫 oa系統 activiti工作流框架 2.將檔案上傳到檔案伺服器(硬碟足夠大)中 3.上傳到t
Struts2 實現檔案上傳下載
檔案上傳對Struts2來說是一件非常容易的事情。Struts2檔案上傳依賴如下jar包 commons-fileupload-x.x.x.jar commons-io-x.x.x.jar 檔案上傳大致步驟: 編寫頁面 配置struts.xml 攔截器會自動接收上傳的檔
SpringBoot下檔案上傳與下載的實現
本文歡迎轉載,轉載請註明出處,謝謝~(作者:喝酒不騎馬 Colton_Null) from CSDN SpringBoot後臺如何實現檔案上傳下載? 最近做的一個專案涉及到檔案上傳與下載。前端上傳採用百度webUploader外掛。有關該外掛的
檔案上傳與下載的功能實現
檔案上傳 檔案上傳原理分析 1、檔案上傳的必要前提: 一、進行檔案上傳時只能使用post方式提交表單 二、表單必須新增一個屬性:enctype=”multipart/form-data” 三、用於上傳檔案的元素必須時 2、enctype屬性 作
基於tobato的fastdfs與spring boot整合實現檔案上傳和下載
專案結構: pom.xml檔案新增配置: <!-- fastdfs --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastd
基於js-ipfs-api實現ipfs的檔案上傳與下載
配置本地的ipfs節點 # 初始化ipfs節點 ipfs init # 執行ipfs節點 ipfs daemon 使用js-ipfs-api呼叫ipfs服務 連線本地ipfs節點 const ipfsAPI = require('ip