Struts2 文件上传,下载,删除
本文介紹了:
1.基于表單的文件上傳
2.Struts 2 的文件下載
3.Struts2.文件上傳
4.使用FileInputStream FileOutputStream文件流來上傳
5.使用FileUtil上傳
6.使用IOUtil上傳
7.使用IOUtil上傳
8.使用數(shù)組上傳多個文件
9.使用List上傳多個文件
----1.基于表單的文件上傳-----
fileupload.jsp
<body> <form action="showFile.jsp" name="myForm" method="post" enctype="multipart/form-data"> 選擇上傳的文件 <input type="file" name="myfile"><br/><br/> <input type="submit" name="mySubmit" value="上傳"/> </form> </body>showFile.jsp
<body> 上傳的文件的內(nèi)容如下: <% InputStream is=request.getInputStream(); InputStreamReader isr=new InputStreamReader(is); BufferedReader br=new BufferedReader(isr); String content=null; while((content=br.readLine())!=null){ out.print(content+"<br/>"); } %> </body>----2.手動上傳-----
----3 Struts2.文件上傳----
案例:使用FileInputStream FileOutputStream文件流來上傳
action.java
package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class MyUpAction extends ActionSupport { private File upload; //上傳的文件 private String uploadContentType; //文件的類型 private String uploadFileName; //文件名稱 private String savePath; //文件上傳的路徑 //注意這里的保存路徑 public String getSavePath() { return ServletActionContext.getRequest().getRealPath(savePath); } public void setSavePath(String savePath) { this.savePath = savePath; } @Override public String execute() throws Exception { System.out.println("type:"+this.uploadContentType); String fileName=getSavePath()+"\\"+getUploadFileName(); FileOutputStream fos=new FileOutputStream(fileName); FileInputStream fis=new FileInputStream(getUpload()); byte[] b=new byte[1024]; int len=0; while ((len=fis.read(b))>0) { fos.write(b,0,len); } fos.flush(); fos.close(); fis.close(); return SUCCESS; } //get set }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.i18n.encoding" value="utf-8"/> <constant name="struts.devMode" value="true"/> <constant name="struts.convention.classes.reload" value="true" /> <constant name="struts.multipart.saveDir" value="f:/tmp"/> <package name="/user" extends="struts-default"> <action name="up" class="com.sh.action.MyUpAction"> <result name="input">/up.jsp</result> <result name="success">/success.jsp</result> <!-- 在web-root目錄下新建的一個 upload目錄 用于保存上傳的文件 --> <param name="savePath">/upload</param> <interceptor-ref name="fileUpload"> <!--采用設(shè)置文件的類型 來限制上傳文件的類型--> <param name="allowedTypes">text/plain</param> <!--采用設(shè)置文件的后綴來限制上傳文件的類型 --> <param name="allowedExtensions">png,txt</param> <!--設(shè)置文件的大小 默認(rèn)為 2M [單位:byte] --> <param name="maximumSize">1024000</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </action> </package> </struts>?
up.jsp
?
<body> <h2>Struts2 上傳文件</h2> <s:fielderror/> <s:form action="up" method="post" name="upform" id="form1" enctype="multipart/form-data" theme="simple"> 選擇文件: <s:file name="upload" cssStyle="width:300px;"/> <s:submit value="確定"/> </s:form> </body>?
success.jsp
?
<body> <b>上傳成功!</b> <s:property value="uploadFileName"/><br/> [img]<s:property value="'upload/'+uploadFileName"/>[/img] </body>?
案例:使用FileUtil上傳
action.java
?
package com.sh.action; import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import java.util.UUID; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class FileUtilUpload extends ActionSupport { private File image; //文件 private String imageFileName; //文件名 private String imageContentType;//文件類型 public String execute(){ try { if(image!=null){ //文件保存的父目錄 String realPath=ServletActionContext.getServletContext() .getRealPath("/image"); //要保存的新的文件名稱 String targetFileName=generateFileName(imageFileName); //利用父子目錄穿件文件目錄 File savefile=new File(new File(realPath),targetFileName); if(!savefile.getParentFile().exists()){ savefile.getParentFile().mkdirs(); } FileUtils.copyFile(image, savefile); ActionContext.getContext().put("message", "上傳成功!"); ActionContext.getContext().put("filePath", targetFileName); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "success"; } /** * new文件名= 時間 + 隨機(jī)數(shù) * @param fileName: old文件名 * @return new文件名 */ private String generateFileName(String fileName) { //時間 DateFormat df = new SimpleDateFormat("yyMMddHHmmss"); String formatDate = df.format(new Date()); //隨機(jī)數(shù) int random = new Random().nextInt(10000); //文件后綴 int position = fileName.lastIndexOf("."); String extension = fileName.substring(position); return formatDate + random + extension; } //get set }?
struts.xml
?
<action name="fileUtilUpload" class="com.sh.action.FileUtilUpload"> <result name="input">/fileutilupload.jsp</result> <result name="success">/fuuSuccess.jsp</result> </action>?
fileutilupload.jsp
?
<form action="${pageContext.request.contextPath }/fileUtilUpload.action" enctype="multipart/form-data" method="post"> 文件:<input type="file" name="image"/> <input type="submit" value="上傳"/> </form>?
fuuSuccess.jsp
?
<body> <b>${message}</b> ${imageFileName}<br/> <img src="upload/${filePath}"/> </body>?
案例:使用IOUtil上傳
action.java
package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import org.apache.commons.io.IOUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class IOUtilUpload extends ActionSupport { private File image; //文件 private String imageFileName; //文件名 private String imageContentType;//文件類型 public String execute(){ try { if(image!=null){ //文件保存的父目錄 String realPath=ServletActionContext.getServletContext() .getRealPath("/image"); //要保存的新的文件名稱 String targetFileName=generateFileName(imageFileName); //利用父子目錄穿件文件目錄 File savefile=new File(new File(realPath),targetFileName); if(!savefile.getParentFile().exists()){ savefile.getParentFile().mkdirs(); } FileOutputStream fos=new FileOutputStream(savefile); FileInputStream fis=new FileInputStream(image); //如果復(fù)制文件的時候 出錯了返回 值就是 -1 所以 初始化為 -2 Long result=-2L; //大文件的上傳 int smresult=-2; //小文件的上傳 //如果文件大于 2GB if(image.length()>1024*2*1024){ result=IOUtils.copyLarge(fis, fos); }else{ smresult=IOUtils.copy(fis, fos); } if(result >-1 || smresult>-1){ ActionContext.getContext().put("message", "上傳成功!"); } ActionContext.getContext().put("filePath", targetFileName); } } catch (Exception e) { e.printStackTrace(); } return SUCCESS; } /** * new文件名= 時間 + 全球唯一編號 * @param fileName old文件名 * @return new文件名 */ private String generateFileName(String fileName) { //時間 DateFormat df = new SimpleDateFormat("yy_MM_dd_HH_mm_ss"); String formatDate = df.format(new Date()); //全球唯一編號 String uuid=UUID.randomUUID().toString(); int position = fileName.lastIndexOf("."); String extension = fileName.substring(position); return formatDate + uuid + extension; } //get set }struts.xml
?
<action name="iOUtilUpload" class="com.sh.action.IOUtilUpload"> <result name="input">/ioutilupload.jsp</result> <result name="success">/iuuSuccess.jsp</result> </action>?
ioutilupload.jsp
?
<form action="${pageContext.request.contextPath }/iOUtilUpload.action" enctype="multipart/form-data" method="post"> 文件:<input type="file" name="image"/> <input type="submit" value="上傳"/> </form>?
iuuSuccess.jsp
?
<body> <b>${message}</b> ${imageFileName}<br/> <img src="image/${filePath}"/> </body>?
案例:刪除服務(wù)器上的文件
?
/** * 從服務(wù)器上 刪除文件 * @param fileName 文件名 * @return true: 從服務(wù)器上刪除成功 false:否則失敗 */ public boolean delFile(String fileName){ File file=new File(fileName); if(file.exists()){ return file.delete(); } return false; }?
案例:使用數(shù)組上傳多個文件
action.java
?
package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Random; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; /** * @author Administrator * */ public class ArrayUpload extends ActionSupport { private File[] image; private String[] imageContentType; private String[] imageFileName; private String path; public String getPath() { return ServletActionContext.getRequest().getRealPath(path); } public void setPath(String path) { this.path = path; } @Override public String execute() throws Exception { for(int i=0;i<image.length;i++){ imageFileName[i]=getFileName(imageFileName[i]); String targetFileName=getPath()+"\\"+imageFileName[i]; FileOutputStream fos=new FileOutputStream(targetFileName); FileInputStream fis=new FileInputStream(image[i]); byte[] b=new byte[1024]; int len=0; while ((len=fis.read(b))>0) { fos.write(b, 0, len); } } return SUCCESS; } private String getFileName(String fileName){ int position=fileName.lastIndexOf("."); String extension=fileName.substring(position); int radom=new Random().nextInt(1000); return ""+System.currentTimeMillis()+radom+extension; } //get set }?
struts.xml
<action name="arrayUpload" class="com.sh.action.ArrayUpload"> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> image/x-png,image/gif,image/bmp,image/jpeg </param> <param name="maximumSize">10240000</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <param name="path">/image</param> <result name="success">/arraySuccess.jsp</result> <result name="input">/arrayupload.jsp</result> </action>arrayUpload.jsp
<body> ===========多文件上傳================= <form action="${pageContext.request.contextPath }/arrayUpload.action" enctype="multipart/form-data" method="post"> 文件1:<input type="file" name="image"/><br/> 文件2:<input type="file" name="image"/><br/> 文件3:<input type="file" name="image"/> <input type="submit" value="上傳"/> </form> </body>arraySuccess.jsp
<body> <b>使用數(shù)組上傳成功s:iterator</b> <s:iterator value="imageFileName" status="st"> 第<s:property value="#st.getIndex()+1"/>個圖片:<br/> [img]image/<s:property value="imageFileName[#st.getIndex()][/img]"/> </s:iterator> <br/><b>使用數(shù)組上傳成功c:foreach</b> <c:forEach var="fn" items="${imageFileName}" varStatus="st"> 第${st.index+1}個圖片:<br/> <img src="image/${fn}"/> </c:forEach> </body>案例:使用List上傳多個文件
action.java
?
package com.sh.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.List; import java.util.Random; import javax.servlet.Servlet; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class ListUpload extends ActionSupport { private List<File> doc; private List<String> docContentType; private List<String> docFileName; private String path; @Override public String execute() throws Exception { for(int i=0;i<doc.size();i++){ docFileName.set(i, getFileName(docFileName.get(i))); FileOutputStream fos=new FileOutputStream(getPath()+"\\"+docFileName.get(i)); File file=doc.get(i); FileInputStream fis=new FileInputStream(file); byte [] b=new byte[1024]; int length=0; while((length=fis.read(b))>0){ fos.write(b,0,length); } } return SUCCESS; } public String getFileName(String fileName){ int position=fileName.lastIndexOf("."); String extension=fileName.substring(position); int radom=new Random().nextInt(1000); return ""+System.currentTimeMillis()+radom+extension; } public String getPath() { return ServletActionContext.getRequest().getRealPath(path); }?
strust.xml
<action name="listUpload" class="com.sh.action.ListUpload"> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> image/x-png,image/gif,image/bmp,image/jpeg </param> <param name="maximumSize"> 10240000 </param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <param name="path">/image</param> <result name="success">/listSuccess.jsp</result> <result name="input">/listupload.jsp</result> </action>listUpload.jsp
<body> ===========List 多文件上傳================= <form action="${pageContext.request.contextPath }/listUpload.action" enctype="multipart/form-data" method="post"> 文件1:<input type="file" name="doc"/><br/> 文件2:<input type="file" name="doc"/><br/> 文件3:<input type="file" name="doc"/> <input type="submit" value="上傳"/> </form> <s:fielderror/> <s:form action="listUpload" enctype="multipart/form-data"> <s:file name="doc" label="選擇上傳的文件"/> <s:file name="doc" label="選擇上傳的文件"/> <s:file name="doc" label="選擇上傳的文件"/> <s:submit value="上傳"/> </s:form> </body>listSuccess.jsp
<body> <h3>使用List上傳多個文件 s:iterator顯示</h3> <s:iterator value="docFileName" status="st"> 第<s:property value="#st.getIndex()+1"/>個圖片: <br/> <img src="image/<s:property value="docFileName.get(#st.getIndex())"/>"/><br/> </s:iterator> <h3>使用List上傳多個文件 c:foreach顯示</h3> <c:forEach var="fn" items="${docFileName}" varStatus="st"> 第${st.index}個圖片<br/> <img src="image/${fn}"/> </c:forEach> </body>案例:Struts2 文件下載
Struts2支持文件下載,通過提供的stram結(jié)果類型來實現(xiàn)。指定stream結(jié)果類型是,還需要指定inputName參數(shù),此參數(shù)表示輸入流,作為文件下載入口。?
簡單文件下載 不含中文附件名
package com.sh.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class MyDownload extends ActionSupport { private String inputPath; //注意這的 方法名 在struts.xml中要使用到的 public InputStream getTargetFile() { System.out.println(inputPath); return ServletActionContext.getServletContext().getResourceAsStream(inputPath); } public void setInputPath(String inputPath) { this.inputPath = inputPath; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } }Struts.xml
<action name="mydownload" class="com.sh.action.MyDownload"> <!--給action中的屬性賦初始值--> <param name="inputPath">/image/1347372060765110.jpg</param> <!--給注意放回后的 type類型--> <result name="success" type="stream"> <!--要下載文件的類型--> <param name="contentType">image/jpeg</param> <!--action文件輸入流的方法 getTargetFile()--> <param name="inputName">targetFile</param> <!--文件下載的處理方式 包括內(nèi)聯(lián)(inline)和附件(attachment)兩種方式---> <param name="contentDisposition">attachment;filename="1347372060765110.jpg"</param> <!---下載緩沖區(qū)的大小--> <param name="bufferSize">2048</param> </result> </action>down.jsp
<body> <h3>Struts 2 的文件下載</h3> <br> <a href="mydownload.action">我要下載</a> </body>文件下載,支持中文附件名?
action
?
package com.sh.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownLoadAction extends ActionSupport { private final String DOWNLOADPATH="/image/"; private String fileName; //這個方法 也得注意 struts.xml中也會用到 public InputStream getDownLoadFile(){ return ServletActionContext.getServletContext().getResourceAsStream(DOWNLOADPATH+fileName); } //轉(zhuǎn)換文件名的方法 在strust.xml中會用到 public String getDownLoadChineseFileName(){ String chineseFileName=fileName; try { chineseFileName=new String(chineseFileName.getBytes(),"ISO-8859-1"); } catch (Exception e) { e.printStackTrace(); } return chineseFileName; } @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } }?
struts.xml
<action name="download" class="com.sh.action.DownLoadAction"> <param name="fileName">活動主題.jpg</param> <result name="success" type="stream"> <param name="contentType">image/jpeg</param> <!-- getDownLoadFile() 這個方法---> <param name="inputName">downLoadFile</param> <param name="contentDisposition">attachment;filename="${downLoadChineseFileName}"</param> <param name="bufferSize">2048</param> </result> </action>down1.jsp
<body> <h3>Struts 2 的文件下載</h3> <br> <a href="download.action">我要下載</a> </body>?
總結(jié)
以上是生活随笔為你收集整理的Struts2 文件上传,下载,删除的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DotNET内存管理与垃圾回收[转]
- 下一篇: gridview 强制过长数据进行换行