文件上传下载:
上传:把本地文件传到服务器上。
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;
}