使用Struts实现文件上传,格式限制,大小限制

本文详细介绍了如何使用Struts2实现文件上传功能,通过核心代码解析,展示了从获取文件路径、创建文件实例到文件复制的全过程,帮助开发者轻松掌握文件上传技巧。

前天项目中需要用到一个图片上传的功能,本来以为就是一个简单的对文件对象的一个流操作,非常简单。但着手开始写的时候才发现,以前了解的文件的上传和下载是基于Servlet实现对流文件的操作,本次项目中的控制器使用的Struts2,难道让允许在众多Action中夹杂上Servlet?即使我能做到这也不符合项目规约,记得以前在学习Struts2的时候提到过Struts2的几个核心jar包中就包括文件上传下载的jar包,但是从来没有用过。第一直觉就是去查Struts2的官方文档,但找了半天没有找到Struts2的AIP,网上大多数都Struts2的API就是将Struts2的官方文档转换成了chm格式。知道了Struts2有个文件上传下载的包,没用过,本来很简单的东西瞬间又变成的很复杂的东西。又开始了在网上的寻找。。。

不过功夫还是不负有心人,看了N多资料后。。。有了点自己小小的总结。
Struts2提供的文件上传下载确实呗简单。。。。
就以图片上除为例子:
核心代码就 3 句,其他全是围绕这3句核心代码写的,还有相应的geter和seter
Java代码 收藏代码

//1、得到图片将要写入的路径  
    String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径  

Java代码 收藏代码

//2、创建一个在此路径下的文件  
File saveFile = new File(new File(realPath),fileTestFileName);  //在该实际路径下实例化一个文件  

Java代码 收藏代码

//3、将上传文件复制到以上实例化的文件中,这部可能会抛出异常需要捕获  
FileUtils.copyFile(fileTest, saveFile);  

Java代码 收藏代码

package com.ibm.action;  

import java.io.File;  
import java.io.IOException;  

import org.apache.commons.io.FileUtils;  
import org.apache.struts2.ServletActionContext;  

import com.opensymphony.xwork2.ActionSupport;  

public class Upload extends ActionSupport{  
    private File fileTest;      //接收这个上传的文件  
    private String fileTestFileName;     //Struts2提供的格式,在文件名后+FileName就是上传文件的名字  
    public File getFileTest() {  
        return fileTest;  
    }  
    public void setFileTest(File fileTest) {  
        this.fileTest = fileTest;  
    }  
    public String getFileTestFileName() {  
        return fileTestFileName;  
    }  
    public void setFileTestFileName(String fileTestFileName) {  
        this.fileTestFileName = fileTestFileName;  
    }  

    @Override  
    public String execute() throws Exception {  
        String[] str = { ".jpg", ".jpeg", ".bmp", ".gif" };  
        //限定文件大小是4MB  
        if(fileTest==null || fileTest.length()>4194304 ){  
            return "imageError";  
        }  
        for (String s : str) {  
            if (fileTestFileName.endsWith(s)) {  
                String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径  
                File saveFile = new File(new File(realPath),fileTestFileName);  //在该实际路径下实例化一个文件  
                //判断父目录是否存在  
                if(!saveFile.getParentFile().exists()){  
                    saveFile.getParentFile().mkdirs();  
                }  
                try {  
                    //执行文件上传  
                    //FileUtils 类名 org.apache.commons.io.FileUtils;  
                    //是commons-io包中的,commons-fileupload 必须依赖 commons-io包实现文件上次,实际上就是将一个文件转换成流文件进行读写  
                    FileUtils.copyFile(fileTest, saveFile);  

                } catch (IOException e) {  
                    return "imageError";  
                }  
            }  
        }  
        return "imageSuccess";  
    }  

}  这里写代码片
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值