java框架之struts2(文件上传)

23 篇文章 0 订阅
9 篇文章 0 订阅
上传单个文件的步骤
第一步:引入jar包,后者jar包是很重要的,利用它的FileUtils处理上传的文件
第二步:把form表单中的 enctype 设置为:multipart/form-data

表单中包含一个<input   type=”file” >

<!-- 单文件上传 -->
  <s:form action="fileUpload" method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
  <br>
  <input type="submit" value="提交"/>
  </s:form>

第三步:在Action类中添加一些属性
注意:后台的File对象的名称要和前台的input的name相同,这样struts2就可以利用反射技术调用set方法给File赋值了

package com.dx.action;

import java.io.*;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{

private static final long serialVersionUID = -2506541803894251705L;
private String username;
//注意,file并不是指前端jsp上传过来的文件本身,而是文件上传过来存放在临时文件夹下面的文件
private File file;
//提交过来的file的名字
private String fileFileName;
   
    //提交过来的file的MIME类型
    private String fileContentType;

    public String getUsername()
    {
        return username;
    }

    public void setUsername(String username)
    {
        this.username = username;
    }

    public File getFile()
    {
        return file;
    }


    public void setFile(File file)
    {
        this.file = file;
    }

    public String getFileFileName()
    {
        return fileFileName;
    }


    public void setFileFileName(String fileFileName)
    {
        this.fileFileName = fileFileName;
    }

    public String getFileContentType()
    {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType)
    {
        this.fileContentType = fileContentType;
    }
   
    @Override
    public String execute() throws Exception
    {
        String root = ServletActionContext.getServletContext().getRealPath("/upload");      
        InputStream is = new FileInputStream(file);     
        OutputStream os = new FileOutputStream(new File(root, fileFileName));   
        System.out.println("fileFileName: " + fileFileName);

        // 因为file是存放在临时文件夹的文件,我们可以将其文件名和文件路径打印出来,看和之前的fileFileName是否相同
   System.out.println("file: " + file.getName());
   System.out.println("file: " + file.getPath());
       
   byte[] buffer = new byte[500];
        int length = 0;
        
        while(-1 != (length = is.read(buffer, 0, buffer.length)))
        {
            os.write(buffer);
        }
        
        os.close();
        is.close();
        
        return "success";
    }

注意上传的文件大小的限制,这个是可以设置的

<constant name= "struts.multipart.maxSize" value="XXXX" />
value就是设置文件的大小,注意它是所有文件大小的总和,默认是 2M.


多文件上传

它的步骤和单个文件上传其实差不多,只不过file变成了文件的数组而已,保存时循环一下就好了
注意,jsp中定义的type为file的input的name要相同

<!-- 多文件上传 -->
  <s:form action="fileUpload" method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
  <br>
  <input type="file" name="file" />
  <br>
  <input type="file" name="file" />
  <br>
  <input type="file" name="file" />
  <br>
  <input type="submit" value="提交"/>
  </s:form>

Action.java

package com.dx.action;

import java.io.*;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{
private static final long serialVersionUID = -2506541803894251705L;

private File[] file;
private String[] fileFileName;
private String[] fileContentType;
// 得到上下文路径
public String execute()throws Exception{
String realpath = ServletActionContext.getServletContext().getRealPath("/upload");
// 新建一个File,如果不存在这个目录就创建出这个目录
File newFile = new File(realpath);
if (!newFile.exists()){
newFile.mkdirs();
}
for(int i=0,len=file.length;i<len;i++){
FileUtils.copyFile(file[i], new File(newFile, fileFileName[i]));// 然后复制文件
}
return "success";
}

File[] getFile() {
return file;
}

public void setFile(File[] file) {
this.file = file;
}

public String[] getFileFileName() {
return fileFileName;
}

public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
}

public String[] getFileContentType() {
return fileContentType;
}

public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
}
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值