您的位置:首页 > 编程语言 > Java开发

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;
}
}


第六步输入项目名称运行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: