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

struts2 实现文件上传下载 (下载支持中文文件名)代码

2015-04-07 14:15 661 查看

struts2 实现文件上传:

Action 代码:

package com.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends BaseAction{

/**
*
*/
private static final long serialVersionUID = 1L;

/**
* 上传后存放在临时文件夹里的文件
*/
private File file;

/**
* 文件名称
*/
private String fileFileName;

/**
* 文件的MIME类型
*/
private String fileContentType;

/**
* 保存的路径
*/
private String savePath;

public String getSavePath() {
return savePath;
}

public void setSavePath(String savePath) {
this.savePath = savePath;
}

public File getFile() {
return file;
}

public void setFile(File file) {
this.file = file;
}

public String getFileFileName() {
return fileFileName;
}

public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}

public String getFileContentType() {
return fileContentType;
}

public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}

public String execute() throws Exception
{

String root = ServletActionContext.getServletContext().getRealPath(savePath);

InputStream is = new FileInputStream(file);

OutputStream os = new FileOutputStream(new File(root, fileFileName));

byte[] buffer = new byte[500];
@SuppressWarnings("unused")
int length = 0;

while(-1 != (length = is.read(buffer, 0, buffer.length)))
{
os.write(buffer);
}

os.close();
is.close();

return SUCCESS;

}

}


struts2.xml配置信息:

<?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>

<package name="fileUpload" extends="struts-default" namespace="/">

<action name="fileUpload_*" class="com.action.FileUploadAction" method="{1}">

<param name="savePath">/upload</param> //注意在当前工程里建一个 upload文件夹

<result>
/login.jsp
</result>

</action>

</package>
</struts>


文件上传的 jsp 页面:

<form action="fileUpload.action" method="post" enctype="multipart/form-data">
file: <input type="file" name="file"/><br>
<input type="submit" value="submit"/>
</form>


struts2实现文件下载源码:支持中文文件名

注意:下载文件的大小设置问题,默认是2M. 可以在struts.properties 设置 struts.multipart.maxSize=10485760 (10M 大小根据自己情况)

action 的代码:

package com.action;

import java.io.IOException;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;

public class FileDownloadAction extends BaseAction{

/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 文件名称
*/
private String fileName;

public String getFileName() throws IOException {

<span style="color:#ff0000;">return  new String(fileName.getBytes(), "ISO8859-1"); //转码 使其支持中文,不然无法显示文件名的中文字符</span>
}

public void setFileName(String fileName) {

this.fileName = fileName;;

}

public InputStream getInputStream() throws Exception{

return ServletActionContext.getServletContext().getResourceAsStream( fileName);

}

public String execute()throws Exception{
return SUCCESS;
}
}


下载的 struts2.xml配置信息:

<action name="download" class="com.action.FileDownloadAction">

<result type="stream" name="success">
<param name="contentDisposition">attachment;fileName="${fileName}"</param>
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<param name="inputName"><span style="color:#ff0000;">InputStream</span></param> //InputStream 是有Action中的<span style="font-family: Arial; font-size: 14px; line-height: 26px;">getInputStream()方法 去掉get而定的,要一致</span>
<param name="bufferSize">10485760</param>//文件大小(10M)
</result>

</action>


jsp页面:

<a href="download.action?fileName=upload/铭记11er.mp3">点击下载</a>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: