SSH入门系列4:上传文件
SSH入门系列4:上传文件
ORZ你好 发表于6个月前
SSH入门系列4:上传文件
  • 发表于 6个月前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

Struts2上传文件依赖于Struts2所自带的两个包(commons-fileupload-1.2.2.lib和commons-io-2.0.1.lib),并通过拦截器来实现,拦截器则被定义到默认拦截器,所以无需自己在手工配置。

此外,其默认大小是在 default.properties文件的struts.multipart.maxSize=2097152,也就是2M大小。如果想要修改,有两种方式

  第一种方式需要在src目录下,新建一个struts.properties文件,指定上传大小。如果想上传为10M,则改为:struts.multipart.maxSize=10487560 (1024*1024*10)。

 第二种方式在struts.xml进行指定

<constant  name="struts.multipart.maxSize"  value="10497560">   </constant>

注意:上传方式一次只能上传10M,哪怕多个文件并在一起,也是只有最大10M。

         如果struts.properties  和struts.xml同时设置了,那么以struts.properties为主(优先级较高)。

具体实现步骤:

1)创建一个jsp页面,jsp页面有文件上传的表单对象 。

<form action="myuser/User_shangchuan!shangchuan"   method="post"  type="multipart/form-data">

文件:<input type="file" name="file" />

<input type="submit "  value="提交" />

</form>
 

注意: 

1:表单对象的提交方式为post ,同时需要设置属性 enctype="multipart/form-data"

2:文件上传的表单名要对应action里面的属性

<input type="file" name="file"/>,即action里面必须有一个 File类型的  名称为file的数据。

2)开发action,添加如下2个属性:

必须具备如下几个属性:

private File file ; //与上文的 name = "file"想对应

private  String fileFileName;   

//这里的fileFileName ,不能随意变动,如果上面为file1,下面则改为file1FileName,下面的fileContentType也是同理。

private  String fileContentType  

具体代码如下(代码相对固定):

//上传功能的本质上是选择一个文件,然后逐步读取,并在服务器文件夹内,将读取的文件内容重新写出来。所以实际上只需要OutputStream(os 输出流,用来在服务器写入文件,需要制定路径和文件名) ,InputStream (is 输入流,用来读取上传的文件)  

Action内容设置如下:

private String fileFileName;

private file file;

private String fileContentType;

get ,set方法。。。。

  public String shangchuan(){

//获取文件的存储路径,这里realPath是虚拟目录,然后在虚拟目录下新建一个upload文件夹,用来存放上传的数据,如果改成getContextPath()则输出/weblianxi(项目名称)

   String path = ServletActionContext.getRequest.getRealPath("/upload");

 OutputStream  os = new FileOutputStream(new File(path,fileFileName));

InputStream is = new FileInputStream(file);

byte[] b =new byte[1024];

int length=0;

//这里要抛出异常,其次,读完后输出-1

while(-1!=(length = is.read(b))){

os.write(b,0,length);

}

is.cloase();

os.close();

return "success";

}

多文件上传和单文件上传类似,jsp页面如下设置:

<form  action="myuser/User_shangchuan2!shangchuan2"  method="post"  enctype="multipart/form-data">
注意这里file文件名必须是一样的,在demo中同取了file1
文件1:<input type="file"  name="file1"/>
文件2:<input type="file"   name="file1"/>
<input type="submit" value="提交" />

 

在action页面,将数据存入list里面,具体代码如下:

    private List<String> file1FileName;
    private List<File> file1;
    private List<String> file1ContentType;
    get set方法。。。

//利用file1.size依次读取

public String shangchuan2() throws Exception{
    String path = ServletActionContext.getRequest().getRealPath("/upload");
    for (int i = 0; i < file1.size(); i++) {
        OutputStream  os  = new FileOutputStream(new File(path,file1FileName.get(i)));
        InputStream  is = new FileInputStream(file1.get(i));
        byte[]  b = new byte[1024];
        int length= 0;
        while (-1!=(length=is.read(b))) {
            os.write(b, 0, length);
            
        }
        is.close();
        os.close();
        
    }

    return"success";
}

 

共有 人打赏支持
粉丝 0
博文 13
码字总数 9911
×
ORZ你好
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: