struts2文件上传和下载

第13章 文件上传与下载
    文件上传
        依赖commons FileUpload,同时依赖commons IO
        在页面中设置file表单控件,指定enctype="multipart/form-data"
        在Action里面用java.io.File类来接收这个控件,另外定义两个String类型属性:file控件名+FileName(文件名);file控件名+ContentType(文件内容类型)
        在execute()方法里面进行保存文件操作
            根据File变量构造一个文件输入流
            构建一个文件输出流
                如果需要保存当前服务的某包下面,通过ServletActionContext.getRequest().getRealPath("/包");
            InputStream is = new FileInputStream(file);
String root = ServletActionContext.getRequest().getRealPath("/");
File diskFile = new File(root,getFileFileName);
OutputStream os = new FileOutputStream(diskFile);
byte[] buffer = new byte[1024];
int i = 0;
while((i = is.read(buffer)) > 0) {
    os.write(buffer,0,i);
}
is.close();
os.close();
        全局环境变量设置。在struts.xml中添加
            中文转码问题
                <constant name="struts.i18n.encoding" value="utf-8"/>(default.properties里面默认就是utf-8的)
            临时存储目录
                <constant name="struts.multipart.saveDir" value="c:/" />(默认没有指定)
            上传文件大小
                <constant name="struts.multipart.maxSize" value="10240000"/>    //value不能使用表达式
            允许的文件类型
                在相应的action里面把fileUpload拦截器单独提出来配置
                <action ....>
    <result ...>...</result>
    <intercepter-ref name="defaultStack">
        <!-- 这里的文件类型可以到tomcat目录下的conf目录下的web.xml中去找 -->
        <param name="fileUpload.allowedTypes">text/plain</param>
        <param name="fileUpload.maximumSize">1024000</param>
    </intercepter-ref>
</action>
                在struts-messages.properties里面配置很多消息,可以在资源束文件中覆盖这些key对应的值以达到国际化的目的
                不符合要求则自动添加错误信息到fieldError,并回到input的result页面
对应的key分别是:类型不允许struts.messages.error.content.type.not.allowed
                         文件过大   struts.messages.error.file.too.large
                         其他上传错误   struts.messages.error.uploading
        多文件上传
            将File和它对应的两个String类型变量都修改为List类型,因为他们是一一对应的关系,所以循环集合便可以一一保存
    文件下载
        stream结果类型
            contentType MIMETYPE
            contentDisposition 下载方式和文件名
            inputName 指定Action里面返回InputStream的方法名
            inputStream 接收上面这个方法的返回值
            bufferSize 缓冲大小,默认1k
        Action里面添加一个返回InputStream的方法
            public InputSteam getDownloadFile() {
    return new FileInputStream("上下文内在资源及路径");
}
        struts.xml
            <action ....>
    <result name="success" type="stream">
        <param name="contentType">application/vnd.ms-powerpoint</param>    //参见tomcat的web.xml
        <param name="contentDisposition">filename="文件名"</param>
        <!-- <param name="inputName">action里返回InputStream的方法名,去掉get改首字母小写</param> -->
    </result>
</action>
        中文文件名的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值