struts2--文件上传下载

文件上传下载:

上传:把本地文件传到服务器上。

struts2文件上传是在fileUpload的基础上进一步的封装;

struts2文件上传的操作在<interceptor-ref name="fileUpload"/>的拦截器里面;

文件上传的三个要求:1)、表单提交为post;2)、表单里面文件上传项,文件上传项里面必须有name属性;3)、form里面enctype="multipart/form-data"

上传的步骤:

声明三个变量,生成变量的set方法

//上传的文件 (是文件上传项里面的name的值)

private File upload;

//声明上传文件名称 命名规范   文件上传项里面的name的值FileName

private String uploadFileName;

//声明上传文件的格式的mime类型,每种文件格式 对应类型 mime类型,针对不同的类型做不同的处理

private String uploadContentType;

设置变量的get和set方法;

得到上传文件的路径,在服务器里面创建文件,把上传的文件复制到服务器的文件里面

//得到上传文件的路径

String path = ServletActionContext.getServletContext().getRealPath("/img");

//把上传文件复制到服务器的一个文件里面去

//在服务器里面创建文件

File file = new File(path+"/"+uploadFileName);

//复制文件

FileUtils.copyFile(upload, file);

上传文件的问题:

它有大小限制,一般是2M,需要在常量中进行设置更改:

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

多文件上传:

与单文件上传的方式大同小异,只是变量的生成为数组的形式;在服务器创建文件时要先进行遍历,然后一个一个上传到服务器:

// 得到上传文件的路径

String path = ServletActionContext.getServletContext().getRealPath("/img");

for(int i=0;i<uploadimg.length;i++) {

//得到每一个文件

File file = new File(path+"/"+uploadimgFileName[i]);

//复制

FileUtils.copyFile(uploadimg[i], file);

}

文件的下载:

从服务器上将文件复制到本地。

在action配置result里面进行配置

<result name="success" type="stream">

<param name="contentDisposition">attachment;filename=${fileName}</param>

<param name="inputStream">${inputStream}</param>

</result>

(2)通过action传递fileName和inputStream

action:

private String name = "中文.jpg";

//提供fileName和inputStream的get方法

public String getFileName() {

//把文件名称进行编码

//区别不同的浏览器 User-Agent

String agent = ServletActionContext.getRequest().getHeader("User-Agent");

if (agent.contains("Firefox")) { // 火狐浏览器

try {

name = "=?UTF-8?B?"

+ new BASE64Encoder().encode(name.getBytes("utf-8"))

+ "?=";

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

} else { // IE及其他浏览器

try {

name = URLEncoder.encode(name, "utf-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

return name;

}

public InputStream getInputStream() {

//得到下载文件的完全路径

String url = ServletActionContext.getServletContext().getRealPath("/img/"+name);

//得到下载文件的输入流

try {

InputStream in = new FileInputStream(url);

return in;

} catch (FileNotFoundException e) {

e.printStackTrace();

}

return null;

}

猜你喜欢

转载自jackpot1234.iteye.com/blog/2314536