stuts2關于文件的上傳和下載
struts2關于文件的上傳和下載
1、 struts2關于文件的上傳
1.1編寫UploadFile這個上傳類
package model;
import java.io.File;
public class UploadFile {
//定義要上傳的文件
private File[] upload;
//定義上傳文件的名字
private String[] uploadFileName;
//定義上傳文件的類型
private String uploadContentType;
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
}
1.2編寫action
package action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import model.UploadFile;
import java.io.*;
public class UploadAction extends ActionSupport implements ModelDriven<UploadFile> {
private UploadFile upload=new UploadFile();
@Override
public UploadFile getModel() {
return upload;
}
public String upload() {
//這兒讀寫操作還可以用 FileUtils這個封裝類不過建議小白還是用原始的
for (int i = 0; i <upload.getUpload().length; i++) {
//設置上傳路徑(一定要設置對)
String realPath="D:\\";
realPath=realPath+"upload\\"+upload.getUploadFileName()[i];
//設置高速緩沖輸入流
BufferedInputStream bi=null;
//設置高速緩沖輸出流
BufferedOutputStream bo=null;
try {
bi=new BufferedInputStream(new FileInputStream(upload.getUpload()[i]));
bo=new BufferedOutputStream(new FileOutputStream(realPath));
//設置判斷標志 初始化-1
int len=-1;
//設置字節數組用作存儲緩沖 打下設置為1MB
byte[] bytes = new byte[1024];
while ((len=bi.read(bytes))!=-1) {
//開始循環寫入
bo.write(bytes,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//關閉輸入輸出流
try {
if (bi != null)
bi.close();
if (bo != null)
bo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return SUCCESS;
}
}
1.3配置stuts.xml
<?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>
<constant name="struts.devMode" value="true"/>
<!--配置constant控制上傳大小-->
<constant name="struts.multipart.maxSize" value="911"/>
<package name="upload" extends="struts-default" namespace="/upload">
<action name="upload" class="action.UploadAction" method="upload">
<!--配置攔截器控制上傳類型-->
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">.mp3,.mp4,.flv,.jpg,.png,.gif</param>
</interceptor-ref>
<result name="success">/success.jsp</result>
<!--如果發生錯誤回到原頁面-->
<result name="input">/upload.jsp</result>
</action>
</package>
</struts>
1.4編寫jsp頁面
1.4.1編寫success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>成功頁面</title>
</head>
<body>
恭喜你上傳成功
</body>
</html>
1.4.2編寫upload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>上傳頁面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/upload/upload" method="post" enctype="multipart/form-data">
文件1:<input type="file" name="upload"><br><s:actionerror/>
文件2:<input type="file" name="upload"><br><s:actionerror/>
文件3:<input type="file" name="upload"><br><s:actionerror/>
<input type="submit" value="提交">
</form>
</body>
</html>
至此struts做文件上傳工作完成
不過上傳之后錯誤信息是英文的所以得做struts的國際化
1.5建立msg_zh_CN.properties文件名字必須這么寫這是固定
struts.messages.upload.error.SizeLimitExceededException=上傳的文件大小不得超過{0}
1.6修改struts.xml目的是注冊剛才的配置文件
<?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>
<constant name="struts.devMode" value="true"/>
<!--配置constant控制上傳大小-->
<constant name="struts.multipart.maxSize" value="911"/>
<!--注冊國際化文件msg_zh_CN.properties-->
<constant name="struts.custom.i18n.resources" value="resource.msg"/>
<package name="upload" extends="struts-default" namespace="/upload">
<action name="upload" class="action.UploadAction" method="upload">
<!--配置攔截器控制上傳類型-->
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">.mp3,.mp4,.flv,.jpg,.png,.gif</param>
</interceptor-ref>
<result name="success">/success.jsp</result>
<!--如果發生錯誤回到原頁面-->
<result name="input">/upload.jsp</result>
</action>
</package>
</struts>
至此strtus2上傳多文件工作完成,有什么問題歡迎大家留言評論
2.struts關于文件的下載有下載列表的
2.1 action類的編寫,編寫文件下載列表action
package action;
import org.apache.struts2.ServletActionContext;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ListAction {
public String list() {
List<String> listString=new ArrayList<>();
String realPath="D:\\upload";
File file = new File(realPath);
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File file1 : files) {
String name = file1.getName();
listString.add(name);
}
}
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("listString",listString);
return "list";
}
}
2.2編寫列表頁面,list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>文件下載列表</title>
</head>
<body>
<c:forEach items="${listString}" var="li">
${li}<a href="${pageContext.request.contextPath}/download/down.action?filename=${li}">下載</a><br>
</c:forEach>
</body>
</html>
2.3編寫下載action
package action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.commons.io.FilenameUtils;
import org.apache.struts2.ServletActionContext;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.URLEncoder;
public class DownloadAction extends ActionSupport{
//定義文件下載輸入流
private InputStream inputStream;
//定義文件下載名字
private String fileName;
//定義下載文件的大小
private int fileLength;
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;
}
public int getFileLength() {
return fileLength;
}
public void setFileLength(int fileLength) {
this.fileLength = fileLength;
}
public String down() {
HttpServletRequest request = ServletActionContext.getRequest();
String filename = request.getParameter("filename");
String realPath = "D:\\upload\\";
realPath=realPath+filename;
try {
inputStream=new FileInputStream(realPath);
fileName= FilenameUtils.getName(realPath);
fileName = URLEncoder.encode(fileName, "UTF-8");
fileLength=inputStream.available();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
2.4對配置文件struts.xml做修改
<?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>
<constant name="struts.devMode" value="true"/>
<!--配置constant控制上傳大小-->
<constant name="struts.multipart.maxSize" value="999999999"/>
<constant name="struts.custom.i18n.resources" value="resource.msg"/>
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<package name="upload" extends="struts-default" namespace="/upload">
<action name="upload" class="action.UploadAction" method="upload">
<!--配置攔截器控制上傳類型-->
<interceptor-ref name="defaultStack">
<param name="fileUpload.allowedExtensions">.mp3,.mp4,.flv,.jpg,.png,.gif,.jpeg</param>
</interceptor-ref>
<result name="success">/success.jsp</result>
<!--如果發生錯誤回到原頁面-->
<result name="input">/upload.jsp</result>
</action>
</package>
<package name="down" extends="struts-default" namespace="/download">
<action name="down" class="action.DownloadAction" method="down">
<result name="success" type="stream">
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename=${fileName}</param>
<param name="contentType">application/octet-stream</param>
<param name="contentLength">${fileLength}</param>
</result>
</action>
</package>
<package name="practise" extends="struts-default">
<action name="list" class="action.ListAction" method="list">
<result name="list" type="dispatcher">/list.jsp</result>
</action>
</package>
</struts>
注:對后臺數據的封裝最好采用contexmap 前臺接收struts2采用ognl表達式更好,但是筆者水平有限只用了request自帶設置屬性的方法和jstl表達式。
至此struts2關于文件上傳和下載的應用到此完畢,歡迎指正。
智能推薦
文件的上傳和下載
文件的上傳和下載 文件的上傳和下載,是非常常見的功能。很多的系統中,或者軟件中都經常使用文件的上傳和下載。 比如:QQ 頭像,就使用了上傳。 郵箱中也有附件的上傳和下載功能。 OA 系統中審批有附件材料的上傳。 1 文件的上傳介紹 要有一個 form 標簽,method=post 請求 form 標簽的 encType 屬性值必須為 multipart/form-data 值 在 form 標簽中...
文件的上傳和下載
文件的上傳和下載 文件的上傳和下載是信息化系統,以及網絡程序上非常常見的功能。 比如: QQ中就有上傳頭像 郵箱里附件可以用于下載。 1、文件的上傳介紹(*****重點) 要有一個form表單,并且method是post請求 一定要有input type=file 文件上傳域 form表單編碼方式必須是:multipart/form-data 有服務器程序servlet接收請求,并保存文件 1.1...
文件的上傳和下載
ftp 文件服務器 【1】 分為服務端和客戶端,要求可以有多個客戶端同時操作。 【2】 客戶端可以查看服務器文件庫中有什么文件。 【3】 客戶端可以從文件庫中下載文件到本地。 【4】 客戶端可以上傳一個本地文件到文件庫。 【5】 使用print在客戶端打印命令輸入提示,引導操作 FTP --> 服務端 盡量使用進程完成無阻塞的并發行為 不使用c作為解釋器 (Java C#) Guido的聲明...
文件上傳和下載
在Web應用系統開發中,文件上傳和下載功能是非常常用的功能,今天來講一下JavaWeb中的文件上傳和下載功能的實現。 對于文件上傳,瀏覽器在上傳的過程中是將文件以流的形式提交到服務器端的,如果直接使用Servlet獲取上傳文件的輸入流然后再解析里面的請求參數是比較麻煩,所以一般選擇采用apache的開源工具common-fileupload這個文件上傳組件。這個common-fileuplo...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...