文件上传和下载解析
表单元素的enctype属性:
application/x-www-form-urlencoded(默认)
1)默认编码方式,只处理表单域里的value属性值。
2)可通过request.getParameter()方法取得请求的参数。
multipart/form-data
1)以二进制流的方式处理表单数据,且会将文件域指定的文件内容也封装到请求参数里。
2)无法通过request.getParameter()方法取得请求的参数。
?
?
struts2的文件上传(action属性):
private File xxx;封装该文件对应的文件内容。
private String xxxFileName;该文件的文件名称。
private String xxxContentType;该文件的文件类型。
?
?
fileUpload拦截器:
allowedTypes属性:指定允许上传的文件类型。多文件用","
maximumSize属性:指定允许上传文件的大小。单位是字节。
过滤失败,返回input 逻辑视图。
需要显示的配置defaultStack 拦截器栈
?
?
文件上传的常量配置:
struts.multipart.saveDir:上传文件的临时文件夹。
默认使用javax.servlet.context.tempdir.
此临时文件夹在Tomcat的work\Catalina\localhost\下
应避免使用Tomcat的工作路径作为临时路径
struts.multipart.maxSize:上传文件的最大字节数。
可控制整个struts2应用里的上传文件的大小。
?
?
输出错误提示:
-<s:fileError/>
国际化错误提示的key
struts.message.error.file.too.large:上传文件过大。
struts.message.error.content.type.not.allowed:上传类型错误。
struts.message.error.uploading:文件上传出现未知错误。
?
?
文件下载
stream结果类型
contentType属性:指定被下载文件的文件类型。
inputName属性:指定被下载文件的入口输入流。
contentDisposition:
指定下载文件的处理方式(内联(inline)和附件(attachment))。
通过filename指定下载文件的文件名。
bufferSize属性:指定下载文件时的缓冲大小。
?
?
?
?
?
??
?
?
?
?
?
/** * 写入图片 */package org.cric.util;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class ImgWriteUtil {private BufferedInputStream bis;private BufferedOutputStream bos;public void writeImg(File fromfile, File tofile) {// 写入图片int len = 0;int size = 0;try {bis = new BufferedInputStream(new FileInputStream(fromfile));bos = new BufferedOutputStream(new FileOutputStream(tofile));size = (int) fromfile.length();byte[] buffer = new byte[size];while ((len = bis.read(buffer)) > 0) {bos.write(buffer, 0, len);}} catch (FileNotFoundException e) {e.printStackTrace();throw new RuntimeException("创建文件时出错!");} catch (IOException e) {e.printStackTrace();throw new RuntimeException("读写文件时出错!");} finally {try {if (bos != null) {bos.close();}if (bis != null) {bis.close();}} catch (IOException e) {e.printStackTrace();}}}}