web.xml配置:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <web-appversion="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>*.action</url-pattern>
- </filter-mapping>
- </web-app>
struts.xml配置:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
- <struts>
- <constantname="struts.i18n.encoding"value="utf-8"/>
- <packagename="file"extends="struts-default">
- <actionname="showUpload">
- <result>/upload.jsp</result>
- </action>
- <actionname="upload"class="com.boxun.hzw.action.UploadAction">
- <resultname="input">/upload.jsp</result>
- <result>/download.jsp</result>
- <interceptor-refname="fileUpload">
- <paramname="maximumSize">2097152</param>
- <paramname="addowedTypes">image/bmp,image/jpg</param>
- </interceptor-ref>
- <interceptor-refname="defaultStack"></interceptor-ref>
- </action>
- <actionname="download"class="com.boxun.hzw.action.DownloadAction">
- <resultname="success"type="stream">
- <paramname="contentDisposition">attachment;filename="${fileName}"</param>
- <paramname="inputName">downloadFile</param>
- </result>
- </action>
- </package>
- </struts>
后台实体类代码:
- packagecom.boxun.hzw.bean;
- publicclassUploadFiles{
- privateStringuploadContentType;
- privateStringuploadFileName;
- privateStringuploadRealName;
- publicStringgetUploadContentType(){
- returnuploadContentType;
- }
- publicvoidsetUploadContentType(StringuploadContentType){
- this.uploadContentType=uploadContentType;
- }
- publicStringgetUploadFileName(){
- returnuploadFileName;
- }
- publicvoidsetUploadFileName(StringuploadFileName){
- this.uploadFileName=uploadFileName;
- }
- publicStringgetUploadRealName(){
- returnuploadRealName;
- }
- publicvoidsetUploadRealName(StringuploadRealName){
- this.uploadRealName=uploadRealName;
- }
- }
上传Action类:
- packagecom.boxun.hzw.action;
- importjava.io.*;
- importjava.util.ArrayList;
- importjava.util.List;
- importjava.util.UUID;
- importorg.apache.commons.io.FileUtils;
- importorg.apache.struts2.ServletActionContext;
- importcom.boxun.hzw.bean.UploadFiles;
- importcom.opensymphony.xwork2.ActionContext;
- importcom.opensymphony.xwork2.ActionSupport;
- @SuppressWarnings("all")
- publicclassUploadActionextendsActionSupport{
- privatestaticfinallongserialVersionUID=1L;
- privateFile[]upload;//实际上传文件
- privateString[]uploadContentType;//文件的内容类型
- privateString[]uploadFileName;//上传文件名
- privateList<UploadFiles>uploadFiles=newArrayList<UploadFiles>();
- publicStringexecute(){
- StringtargetDirectory=ServletActionContext.getServletContext().getRealPath("/"+"images/");//获得路径
- for(inti=0;i<upload.length;i++){
- StringfileName=uploadFileName[i];//上传的文件名
- Stringtype=uploadContentType[i];//文件类型
- StringrealName=UUID.randomUUID().toString()+
- getExt(fileName);//保存的文件名称、使用UUID+后缀进行保存
- Filetarget=newFile(targetDirectory,realName);
- try{
- FileUtils.copyFile(upload[i],target);//上传至服务器的目录
- }catch(IOExceptione){
- e.printStackTrace();
- returnINPUT;
- }
- //把路径()写入数据库---省略---
- UploadFilesuf=newUploadFiles();//创建文件
- uf.setUploadContentType(type);
- uf.setUploadFileName(fileName);
- uf.setUploadRealName(realName);
- uploadFiles.add(uf);//添加到需要下载文件的List集合中
- }
- ServletActionContext.getRequest().setAttribute("uploadFiles",uploadFiles);
- returnSUCCESS;
- }
- publicFile[]getUpload(){
- returnupload;
- }
- publicvoidsetUpload(File[]upload){
- this.upload=upload;
- }
- publicString[]getUploadContentType(){
- returnuploadContentType;
- }
- publicvoidsetUploadContentType(String[]uploadContentType){
- this.uploadContentType=uploadContentType;
- }
- publicString[]getUploadFileName(){
- returnuploadFileName;
- }
- publicvoidsetUploadFileName(String[]uploadFileName){
- this.uploadFileName=uploadFileName;
- }
- publicList<UploadFiles>getUploadFiles(){
- returnuploadFiles;
- }
- publicvoidsetUploadFiles(List<UploadFiles>uploadFiles){
- this.uploadFiles=uploadFiles;
- }
- publicstaticlonggetSerialversionuid(){
- returnserialVersionUID;
- }
- publicstaticStringgetExt(StringfileName){
- returnfileName.substring(fileName.lastIndexOf("."));
- }
- }
下载Action类:
- packagecom.boxun.hzw.action;
- importjava.io.InputStream;
- importjava.io.UnsupportedEncodingException;
- importorg.apache.struts2.ServletActionContext;
- importcom.opensymphony.xwork2.ActionSupport;
- @SuppressWarnings("all")
- publicclassDownloadActionextendsActionSupport{
- privatestaticfinallongserialVersionUID=6329383258366253255L;
- privateStringfileName;
- privateStringfileRealName;
- publicvoidsetFileName(){
- //得到请求下载的文件名
- Stringfname=ServletActionContext.getRequest().getParameter("name");
- Stringfrealname=ServletActionContext.getRequest().getParameter("realname");
- try{
- /*
- *对fname参数进行utf-8解码、注意:实际进行utf-8解码时会使用本地编码、本机为GBK。
- *这里使用reqeust.setCharacterEncoding解码无效.
- *只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件
- */
- fname=newString(fname.getBytes("ISO-8859-1"),"utf-8");
- frealname=newString(frealname.getBytes("ISO-8859-1"),"utf-8");
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }
- this.fileName=fname;
- this.fileRealName=frealname;
- }
- /*
- *@getFileName此方法对应的是struts.xml文件中的:
- *<paramname="contentDisposition">attachment;filename="${fileName}"</param>
- *这个属性设置的是下载工具下载文件时显示的文件名、要想正确的显示中文文件名,
- *我们需要对fileName再次编码
- *否则中文名文件将出现乱码、或无法下载情况
- *@return
- */
- publicStringgetFileName(){
- try{
- fileRealName=newString(fileRealName.getBytes(),"ISO-8859-1");
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }
- returnfileRealName;
- }
- /*
- *@getDownloadFile此方法对应的是Struts.xml文件中的:
- *<paramname="inputName">downloadFile</param>
- *返回下载文件的流、可以参看Struts2的源码
- */
- publicInputStreamgetDownloadFile(){
- this.setFileName();
- returnServletActionContext.getServletContext().getResourceAsStream("/"+"images/"+fileRealName);
- }
- @Override
- publicStringexecute()throwsException{
- returnSUCCESS;
- }
- }
上传jsp页面:
- <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
- <%
- Stringpath=request.getContextPath();
- StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html>
- <head>
- <basehref="<%=basePath%>">
- <title>MyJSP'upload.jsp'startingpage</title>
- <metahttp-equiv="pragma"content="no-cache">
- <metahttp-equiv="cache-control"content="no-cache">
- <metahttp-equiv="expires"content="0">
- <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
- <metahttp-equiv="description"content="Thisismypage">
- <!--
- <linkrel="stylesheet"type="text/css"href="styles.css"mce_href="styles.css">
- -->
- </head>
- <body>
- <formaction="upload.action"method="post"enctype="multipart/form-data">
- <table>
- <tr>
- <td>上传文件</td>
- <td>标题:<inputtype="text"name="uploadFileName"/>
- <inputtype="file"name="upload"/><br/>
- 标题:<inputtype="text"name="uploadFileName"/>
- <inputtype="file"name="upload"/><br/>
- 标题:<inputtype="text"name="uploadFileName"/>
- <inputtype="file"name="upload"/><br/>
- 标题:<inputtype="text"name="uploadFileName"/>
- <inputtype="file"name="upload"/><br/>
- 标题:<inputtype="text"name="uploadFileName"/>
- <inputtype="file"name="upload"/>
- </td>
- </tr>
- <tr>
- <td><inputtype="submit"value="提交"/></td>
- <td><inputtype="reset"value="重置"/></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
下载jsp页面:
- <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
- <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
- <%
- Stringpath=request.getContextPath();
- StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html>
- <head>
- <basehref="<%=basePath%>">
- <title>MyJSP'download.jsp'startingpage</title>
- <metahttp-equiv="pragma"content="no-cache">
- <metahttp-equiv="cache-control"content="no-cache">
- <metahttp-equiv="expires"content="0">
- <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
- <metahttp-equiv="description"content="Thisismypage">
- <!--
- <linkrel="stylesheet"type="text/css"href="styles.css"mce_href="styles.css">
- -->
- </head>
- <body>
- <c:forEachitems="${uploadFiles}"var="files">
- <imgsrc="images/${files.uploadRealName}"mce_src="images/${files.uploadRealName}"alt="ds"width="200px"height="300px"/>
- <ahref="download.action?name=${files.uploadFileName}&realname=${files.uploadRealName}"mce_href="download.action?name=${files.uploadFileName}&realname=${files.uploadRealName}">${files.uploadFileName}</a><br/>
- </c:forEach>
- </body>
- </html>