文件的上传与下载

1. 文件的上传:


1). 表单需要注意的 3 点
a.须把 HTML 表单的 enctype 属性设置为 multipart/form-data
b.须把 HTML 表单的method 属性设置为 post
c.需添加 <input type=“file”> 字段. 


2). Struts2 的文件上传实际上使用的是 Commons FileUpload 组件, 所以需要导入


commons-fileupload-1.3.jar
commons-io-2.0.1.jar


3). Struts2 进行文件上传需要使用 FileUpload 拦截器


4). 基本的文件的上传: 直接在 Action 中定义如下 3 个属性, 并提供对应的 getter 和 setter


//文件对应的 File 对象
private File [fileFieldName];
//文件类型
private String [fileFieldName]ContentType;
//文件名
private String [fileFieldName]FileName;


5). 使用 IO 流进行文件的上传即可. 


6). 一次传多个文件怎么办 ?


若传递多个文件, 则上述的 3 个属性, 可以改为 List 类型! 多个文件域的 name 属性值需要一致. 


7). 可以对上传的文件进行限制吗 ? 例如扩展名, 内容类型, 上传文件的大小 ? 若可以, 则若出错, 显示什么错误消息呢 ? 消息可以定制吗 ? 


可以的!


可以通过配置 FileUploadInterceptor 拦截器的参数的方式来进行限制


maximumSize (optional) - 默认的最大值为 2M. 上传的单个文件的最大值


allowedTypes (optional) - 允许的上传文件的类型. 多个使用 , 分割


allowedExtensions (optional) - 允许的上传文件的扩展名. 多个使用 , 分割.


注意: 在 org.apache.struts2 下的 default.properties 中有对上传的文件总的大小的限制. 可以使用常量的方式来修改该限制


struts.multipart.maxSize=2097152


定制错误消息. 可以在国际化资源文件中定义如下的消息:


struts.messages.error.uploading - 文件上传出错的消息


struts.messages.error.file.too.large - 文件超过最大值的消息


struts.messages.error.content.type.not.allowed - 文件内容类型不合法的消息


struts.messages.error.file.extension.not.allowed - 文件扩展名不合法的消息


问题: 此种方式定制的消息并不完善. 可以参考 org.apache.struts2 下的 struts-messages.properties, 可以提供更多的定制信息.


2. 文件的下载:


1). Struts2 中使用 type="stream" 的 result 进行下载即可


2). 具体使用细节参看 struts-2.3.15.3-all/struts-2.3.15.3/docs/WW/docs/stream-result.html


3). 可以为 stream 的 result 设定如下参数


contentType: 结果类型
contentLength: 下载的文件的长度
contentDisposition: 设定 Content-Dispositoin 响应头. 该响应头指定接应是一个文件下载类型, 一般取值为  attachment;filename="document.pdf".


inputName: 指定文件输入流的 getter 定义的那个属性的名字. 默认为 inputStream


bufferSize: 缓存的大小. 默认为 1024
allowCaching: 是否允许使用缓存 
contentCharSet: 指定下载的字符集 


4). 以上参数可以在 Action 中以 getter 方法的方式提供!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值