文件上传

struts2文件上传

文件上传需要的部分包括:

  • 包含form的视图
  • 结果视图
  • struts.xml配置
  • *action方法
  • web.xml的配置,这个和其他的struts2的案例相同

包含form的视图

<%@ page language="java" import ="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>//使用struts2的标签必须有的语句
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>struts2中的文件上传</title>
  </head>
  <body>
    <%--文件上传的必要前提:
         1.请求方式必须是post
         2.enctype属性的取值必须是multipart/form-data
         3.提供一个文件选择域
    --%>
    <s:actionerror/>
    <s:form action="upload.action" enctype="multipart/form-data">

        <s:file name="photo" label="照片" />
        <s:submit value="上传"/>
    </s:form>
  </body>
</html>

结果视图:略。
在struts.xml中主要是配置action和设置常量。

<action name="upload" class="myclass" method="upload">
<result name="success">success.jsp</result>
<constant name="struts.dev" value="true"></constant>
<constant name="struts.multipart.maxSize value="10485760"></constant>

在web.xml中配置过滤器,直接照抄就好

<filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

最后是action方法,重点。

  1. 首先需要获取上传的字段,同form中的name相同
  2. 还需要struts的两个属性
public class myclass extends ActionSupport{
    //上传字段,同form中文件的name相同
    private File photo;
    //struts的属性配置
    private String photoFileName;//上传字段+FileName
    private String photoContentType;//上传字段+ContentType,MIME类型
    public String upload()
    {
        //需要目的地址,存放文件,可以直接用一个变量存地址,也可以用ServletActionContext
        //方法1
        File destFile  = new File(destPath, photoFileName);//若用这个方法,需要在方法外定义的destPath变量。
        //方法2
            String dirctory = ServletActionContext.getServletContext().getRealPath("/WEB-INF/files");//此处的WEB-INF不是IDE目录工程中的文件,而是服务器Tomato中的文件,在服务器的文件中可以找到上传的文件。
            File destFile  = new File(dirctory);
            //此时的文件为临时文件,小于10k时在内存中,大于10k时在缓存中,需要将其拷贝或剪切
            //拷贝如下,但不常用,因为拷贝不删除临时文件
            //FileUtils.copyFile(myFile, destFile);
            //剪切如下,推荐
            photo.renameTo(new File(destFile,photoFileName));
            return "success";
    }  
    //get、set方法略
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值