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

Struts2(多)文件上传和下载使用示例

2013-11-05 10:44 471 查看
[java] view
plaincopyprint?

/**

* Struts2Test

* 使用Struts2上传文件

*/

package com.labci.struts2.action;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

/**

* @author Bill Tu(tujiyue/iwtxokhtd)

* Jun 8, 2011[8:31:01 PM]

*

*/

public class UploadFileAction extends ActionSupport implements

ServletRequestAware {

/**

*

*/

private static final long serialVersionUID = -1896915260152387341L;

private HttpServletRequest request;

public void setServletRequest(HttpServletRequest req) {

this.request=req;

}

private List<File> fileName;//这里的"fileName"一定要与表单中的文件域名相同

private List<String> fileNameContentType;//格式同上"fileName"+ContentType

private List<String> fileNameFileName;//格式同上"fileName"+FileName

private String savePath;//文件上传后保存的路径

private String allowTypes;//允许上传的文件类型

public List<File> getFileName() {

return fileName;

}

public void setFileName(List<File> fileName) {

this.fileName = fileName;

}

public List<String> getFileNameContentType() {

return fileNameContentType;

}

public void setFileNameContentType(List<String> fileNameContentType) {

this.fileNameContentType = fileNameContentType;

}

public List<String> getFileNameFileName() {

return fileNameFileName;

}

public void setFileNameFileName(List<String> fileNameFileName) {

this.fileNameFileName = fileNameFileName;

}

@SuppressWarnings("deprecation")

public String getSavePath() {

return request.getRealPath(savePath);

}

public void setSavePath(String savePath) {

this.savePath = savePath;

}

public String getAllowTypes() {

return allowTypes;

}

public void setAllowTypes(String allowTypes) {

this.allowTypes = allowTypes;

}

@Override

public String execute() throws Exception {

//得到文件的类型

List<String> fileTypes=getFileNameContentType();

String []allowTypes=getAllowTypes().split(",");

List<String> typesList=Arrays.asList(allowTypes);

boolean allowFlag=true;//是否存在不允许上传的文件类型

for(String type:fileTypes){

if(!typesList.contains(type)){

allowFlag=false;

break;

}

}

if(!allowFlag){

request.setAttribute("fileTypeError",

"您上传的文件中存在不允许上传的类型,允许上传的类型为:"+getAllowTypes());

return INPUT;

}

//允许上传

File dir=new File(getSavePath());

if(!dir.exists()){

dir.mkdirs();

}

List<File> files=getFileName();

for(int i=0;i<files.size();i++){

FileOutputStream fos=new FileOutputStream(getSavePath()+"//"+getFileNameFileName().get(i));

FileInputStream fis=new FileInputStream(getFileName().get(i));

byte []buffers=new byte[1024];

int len=0;

while((len=fis.read(buffers))!=-1){

fos.write(buffers,0,len);

}

}

List<String> fileHrefsList=new ArrayList<String>();

for(String fileName:getFileNameFileName()){

String href="<a href="/" mce_href="/""downloadFile.action?fileName="+fileName+"/">"+fileName+"</a>";

fileHrefsList.add(href);

}

request.setAttribute("fileNameList", fileHrefsList);

return SUCCESS;

}

}

[java] view
plaincopyprint?

<%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Struts2多文件上传</title>

</head>

<body>

<table>

<tr>

<td>

<c:choose>

<c:when test="${!empty fileTypeError}">

<font color="red"><b>${fileTypeError}</b></font>

</c:when>

<c:otherwise>

<c:forEach items="${fileNameList}" var="fileName">

${fileName}<br/>

</c:forEach>

</c:otherwise>

</c:choose>

</td>

</tr>

</table>

<!-- 不一定要选择所有文件才可以上传 -->

<form action="uploadFile.action" method="post" enctype="multipart/form-data">

<input type="file" name="fileName"/><br/>

<input type="file" name="fileName"/><br/>

<input type="file" name="fileName"/><br/>

<input type="submit" value="上传"/>

</form>

</body>

</html>

[xhtml] view
plaincopyprint?

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>

<filter-name>struts2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.FilterDispatcher

</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>*.action</url-pattern>

</filter-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

[xhtml] view
plaincopyprint?

<?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="false" />

<!-- 改变struts2默认为2M的上传文件大小限制 -->

<constant name="struts.multipart.maxSize" value="10240000"/>

<package name="upload" extends="struts-default">

<action name="uploadFile" class="com.labci.struts2.action.UploadFileAction">

<param name="savePath">/upload</param>

<param name="allowTypes">text/plain,text/xml,text/html,image/gif,image/png,image/jpeg,image/jpg,image/bmp</param>

<result name="success">index.jsp</result>

<result name="input">index.jsp</result>

</action>

<action name="downloadFile" class="com.labci.struts2.action.DownloadFileAction">

<param name="savePath">/upload</param>

<result name="success">index.jsp</result>

</action>

</package>

</struts>

[java] view
plaincopyprint?

/**

* Struts2Test

* 文件下载的Action

*/

package com.labci.struts2.action;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;

import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.ActionSupport;

/**

* @author Bill Tu(tujiyue/iwtxokhtd)

* Jun 8, 2011[9:15:15 PM]

*

*/

public class DownloadFileAction extends ActionSupport implements

ServletRequestAware, ServletResponseAware {

/**

*

*/

private static final long serialVersionUID = -7448748577778248376L;

private HttpServletRequest request;

private HttpServletResponse response;

private String savePath;

@Override

public String execute() throws Exception {

String fileName=request.getParameter("fileName");

String fullPath=getSavePath()+"//"+fileName;

fileName=new String(fileName.getBytes("utf-8"),"iso-8859-1");

InputStream is=new FileInputStream(fullPath);

int len=0;

byte []buffers=new byte[1024];

response.reset();

response.setContentType("application/x-msdownload");

response.addHeader("Content-Disposition", "attachment;filename=/""+fileName+"/"");

//把文件内容通过输出流打印到页面上供下载

while((len=is.read(buffers))!=-1){

OutputStream os=response.getOutputStream();

os.write(buffers, 0, len);

}

is.close();

return SUCCESS;

}

public void setServletRequest(HttpServletRequest req) {

this.request=req;

}

public void setServletResponse(HttpServletResponse resp) {

this.response=resp;

}

@SuppressWarnings("deprecation")

public String getSavePath() {

return request.getRealPath(savePath);

}

public void setSavePath(String savePath) {

this.savePath = savePath;

}

}











内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: