struts2完美实现文件上传和下载
2016-01-14 11:59
537 查看
## struts2完美实现文件上传和下载 ##
第一步:在webx项目lib目录下加入struts.jar包
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
ognl-3.0.6.jar
struts2-core-2.3.24.1.jar
struts2-dojo-plugin-2.3.24.1.jar
xwork-core-2.3.24.1.jar
第二步配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts08</display-name> <!-- struts2.配置--> <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> <url-pattern>*.jsp</url-pattern> </filter-mapping> <!-- struts2配置--> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>`
第三步配置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.i18n.reload" value="true" /> <!-- 设置动态方法调用 --> <constant name="struts.enable.DnamicMethodInvocation" value="true" /> <!-- 设置开发模式 --> <constant name="struts.devMode" value="true" /> <!-- 指定每次配置文件更改后,自动重新加载 --> <constant name="struts.configuration.xml.reload" value="true" /> <!-- 设置访问方式 --> <constant name="struts.action.extension" value="action,," /> <!-- 去除多余的格式 --> <constant name="struts.ui.theme" value="simple" /> <!--设置上传文件大小20MB,默认为2MB大小 --> <constant name="struts.multipart.maxSize" value="20971520"></constant> <package name="default" extends="struts-default" namespace="/"> <!-- 文件上传配置 --> <action name="m" class="com.action.UploadManyFile"> <!-- 文件上传到user目录下--> <param name="path">/user</param> <param name="size">10240000</param> </action> <!-- 文件下载配置 --> <action name="down" class="com.action.FileDownloadAction"> <param name="path">/user</param> <result name="success" type="stream"> <param name="contentType">application/octet-stream</param> <param name="inputName">inputStream</param> <param name="inputName">inputStream</param> <param name="contentDisposition">filename=${fn}</param> <param name="bufferSize">4096</param> </result> </action> </package> </struts>
第四步jsp写入代码
<%@ page language="java" pageEncoding="UTF8"%> <!Doctype html> <html > <head> <meta charset="UTF-8" /> <title>struts2 多文件上传</title> </head> <body> <h1>struts-多文件 上传</h1> <form action="m.action" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name" value="张三"><br> 文件:<input type="file" name="fs" multiple ><br> 文件1:<input type="file" name="fs" multiple ><br> 文件2:<input type="file" name="fs" multiple ><br> 文件3:<input type="file" name="fs" multiple ><br> <input type="submit" value="上传"><br> </form> <hr> <h1>文件下载</h1> <a href="user/abc.jpg">下载</a> <a href="user/abc.rar">下载zip</a> <a href="down.action?fn=abc.rar">struts2文件下载</a> </body> </html>
第四步在src目录下建立com.action包建立UploadManyFile
package com.action; import java.io.File; import javax.servlet.ServletContext; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import org.apache.struts2.util.ServletContextAware; import com.opensymphony.xwork2.ActionSupport; public class UploadManyFile extends ActionSupport implements ServletContextAware{ private String name;// private File[] fs; //文件名 private String [] fsFileName; private String[] fsContentType;//文件类型 private String path;//文件路径 private int size; //文件大小 private ServletContext ctx; public String getName() { return name; } public void setName(String name) { this.name = name; } public File[] getFs() { return fs; } public void setFs(File[] fs) { this.fs = fs; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public String[] getFsFileName() { return fsFileName; } public void setFsFileName(String[] fsFileName) { this.fsFileName = fsFileName; } public String[] getFsContentType() { return fsContentType; } public void setFsContentType(String[] fsContentType) { this.fsContentType = fsContentType; } @Override public void setServletContext(ServletContext ctx) { this.ctx=ctx; } @Override public String execute() throws Exception { String p=ctx.getRealPath(path); File f=new File(p); if(!f.exists()){ f.mkdirs(); } for(int i=0;i<fs.length;i++){ System.out.println(path); System.out.println(p); System.out.println(size); System.out.println(fs[i].length()); System.out.println("------------"); /* * 如果文件大于上传限定值 */ if(fs[i].length()<size){ FileUtils.copyFile(fs[i],new File(f,fsFileName[i])); } } return null; } }
第五步建立FileDownloadAction
package com.action; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; public class FileDownloadAction implements Action { private String fn; //文件名 private String path; //路径 public String getFn() { return fn; } public void setFn(String fn) { this.fn = fn; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } @Override public String execute() throws Exception { return SUCCESS; } public InputStream getInputStream() throws Exception{ //获得路径和文件名 String ip=ServletActionContext.getServletContext().getRealPath(path)+"/"+fn; InputStream is=new FileInputStream(ip); return is; } }
第六步输入项目名称运行
相关文章推荐
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- java.lang.IllegalStateException: getOutputStream() has already been called for t
- 【spring-security】spring-security MAVEN坐标
- SPRING-SECURITY安全Web框架配置
- java.lang.InstantiationError: sun.net.ftp.FtpClient
- 【spring mvc】spring-mvc配置
- Java字节代码的操纵
- RabbitMQ入门教程 For Java【4】 -Routing
- 总结从maven下resource文件夹读取文件的方法
- java 静态内部类实现单例模式
- Spring与Struts相集成
- 疯狂Java讲义-包装类学习笔记
- Spring容器的继承
- Java贪心算法 删数字问题
- 7 种将字符串反转的 Java 方法
- Eclipse中svn插件的安装
- 用java模拟dos树结构(tree命令)第二弹
- 使用spring cloud实现分布式配置管理
- 使用java命令执行class文件
- Note: An exception occurred while getting the Javadoc. (file not on classpath)