struts2文件上传

来源:互联网 发布:阿里云 专用网络 ftp 编辑:程序博客网 时间:2024/06/06 09:54

struts2的文件上传是用拦截器实现的,我们可以不用去关心底层的实现,使得上传文件变得很简单。

upload.jsp如下:

         <s:form action="uploadFile" method="post" theme="xhtml"  enctype="multipart/form-data">
                 <s:file label="File" name="some" />
                 <s:submit value="上传" />
        </s:form>

也可以采用html标签:

   <s:form action="upload" method="post" theme="xhtml"
   enctype="multipart/form-data">
   <s:file label="File" name="some" />
   <s:submit value="提交" />
  </s:form>

上传页面要注意 method="post" enctype="multipart/form-data"

Action代码如下:

public class UploadAction  {
    private File some;

    private String someFileName;

    private String someContentType;

 public String uploadFile() throws Exception {
   

    if(file != null) {

   //获取存放文件的目录

        String saveDir = ServletActionContext.getServletContext().getRealPath("D:/test/upload");

        File dirFile = new File(saveDir);

   }

 //如果目录不存在,就创建目录

    if(!dirFile.exists()) {

         dirFile.mkdir();

    }

//获取目标文件名

    String targetFileName = generateFileName(fileFileName);

 //生成目标文件

    File targetFile = new File(saveDir,targetFileName);

 //复制文件到存放路径,FileUtils是apache旗下commons-io包中的一个工具类

    FileUtils.copyFile(file,targetFile);

 //实际中可能需要将一些文件信息保存到数据中,比如原始文件名称、文件大小、文件存放路径等信息

 //可调用相关的业务逻辑进行处理}

    return SUCCESS;

 }

//生成新文件名

 private String generateFileName(String fileName) {

     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

    String formatDate = sdf.format(new Date());

    int random = new Random().nextInt(1000);

     int position = fileName.lastIndexOf(".");

     String extension = fileName.substring(position);

     return formatDate + random + extension;

  }

 public String getSomeContentType() {
  return someContentType;
 }

 public void setSomeContentType(String someContentType) {
  this.someContentType = someContentType;
 }

 public String getSomeFileName() {
  return someFileName;
 }

 public void setSomeFileName(String someFileName) {
  this.someFileName = someFileName;
 }

 public File getSome() {
  return some;
 }

 public void setSome(File some) {
  this.some = some;
 }

}

配置文件如下:

   <!-- 设置文件上传大小限制 -->

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

   <!--文件临时存放目录 -->

   <constant name="struts.multipart.saveDir" value="D:/temp"/> 

 <package name="default" namespace="/" extends="struts-default"> 

 <!-- 默认的全局拦截器 --> 

 <default-interceptor-ref name="defaultStack"/>

<!-- 文件上传 -->

 <action name="uploadFile" class="com.test.FileUploadAction" method="uploadFile">

<!-- 如果配置了全局拦截器栈 defaultStack,是不需要再配置拦截器fileUpload 因为defaultStack中已包含fileUpload拦截器-->

<!---进行上传文件大小限制->

<!--<interceptor-ref name="fileUpload">
      <param name="maximumSize">1024000</param>
   </interceptor-ref>-->

<!--<interceptor-ref name="fileUpload"/>-->

  <result>

    /WEB-INF/page/common/success.jsp

</result>

 </action>

</package>

  

  不建议在struts.properties文件直接修改struts的配置。

  建议在struts.xml中以类似 <constant name="struts.multipart.maxSize" value="10000000"/>的形式进行配置修改。

原创粉丝点击