structs2之多文件上传

  1. 云栖社区>
  2. 博客列表>
  3. 正文

structs2之多文件上传

hjzgg 2016-04-28 16:42:35 浏览491 评论0

摘要: //首先是Action部分 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.


//首先是Action部分
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;

import com.hzml.dao.DistributeDao;
import com.opensymphony.xwork2.ActionSupport;

public class CompanyAndDistributeAction extends ActionSupport{
  //和form表单对应的name属性
    private DistributeDao distributeDao;
    private String developName;
    private String email;
    private String phone;
    private String timeID;
    private String money;
    private String taskDescribe;
    
  //多文件上传,form中的每个文件的name属性必须一样,在这里我的name="file"
    private List<File>    file; // 上传的文件
    private List<String> fileFileName; // 文件名称
    private List<String> fileContentType; // 文件类型
    private String savePath;
    
    public DistributeDao getDistributeDao() {
        return distributeDao;
    }

    public void setDistributeDao(DistributeDao distributeDao) {
        this.distributeDao = distributeDao;
    }

    public String getDevelopName() {
        return developName;
    }

    public void setDevelopName(String developName) {
        this.developName = developName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getTimeID() {
        return timeID;
    }

    public void setTimeID(String timeID) {
        this.timeID = timeID;
    }

    public String getMoney() {
        return money;
    }

    public void setMoney(String money) {
        this.money = money;
    }

    public String getTaskDescribe() {
        return taskDescribe;
    }

    public void setTaskDescribe(String taskDescribe) {
        this.taskDescribe = taskDescribe;
    }

    public List<File> getFile() {
        return file;
    }

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

    public List<String> getFileFileName() {
        return fileFileName;
    }

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

    public List<String> getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(List<String> fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String getSavePath() {
        return ServletActionContext.getServletContext().getRealPath(savePath);
    }

    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }

    private void init() throws UnsupportedEncodingException{
        ServletActionContext.getRequest().setCharacterEncoding("UTF-8");
        ServletContext context = ServletActionContext.getServletContext();  
    }

    public String saveTask () throws Exception{
        init();
        // 取得需要上传的文件数组
        List<File> files = getFile();
        if (files != null && files.size() > 0) {
            for (int i = 0; i < files.size(); i++) {
                FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getFileFileName().get(i));
                FileInputStream fis = new FileInputStream(files.get(i));
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = fis.read(buffer)) > 0) {
                    fos.write(buffer, 0, len);
                }
                fis.close();
                fos.close();
            }
        }
        return "saveTask";
    }
    
    @Override
    public String execute() throws Exception{
         return "success";
    }
}


//jsp代码部分
<form action="companyAndDistributeAction" method="post" enctype="multipart/form-data" name="contactForm" id="contactForm">
                <br/>
                    <div>
                        <label>发布者:<span>*</span></label>
                        <input type="text" name="developName" id="developName"  />
                    </div>
                    <div>
                        <label>邮箱:<span>*</span></label>
                        <input type="text" name="email" id="email"  />
                    </div>
                    <div>
                        <label>电话:</label>
                        <input type="text" name="phone" id="phone"  />
                    </div>
                    <div>
                        <label>任务完成时间:<span>*</span></label>
                        <input type="text" name="timeID" id="timeID" />
                    </div>
                    <div>
                        <label>任务费用:<span>*</span></label>
                        <input type="text" name="money" id="money" />
                    </div>
                    <div>
                        <label>任务描述:</label>
                        <textarea name="taskDescribe" rows="10" cols="20" id="taskDescribe"></textarea>
                    </div>
                    <div>
                        <label>任务说明文档:<span>*</span></label>
                        <input type="file" name="file" id="file" />
                    </div>
                    <a class="button" href="#" style="float:right;" onclick="$('#contactForm')[0].submit(); return false;" id="send"><span>发布任务</span></a>
            </form>


//structs2配置文件部分
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE struts PUBLIC     
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     
  "http://struts.apache.org/dtds/struts-2.0.dtd">    
<struts>
  <!-- 将Action的创建交给spring来管理 -->  
  <constant name="struts.objectFactory" value="spring" />  
  <constant name="struts.i18n.encoding" value="utf-8"/>
  
  <package namespace="/" name="struts2" extends="struts-default">  
    
        <!-- package中的标签必须按照如下顺序配置
        result-types,interceptors,default-interceptor-ref,default-action-ref,default-class-ref,global-results,global-exception-mappings,action*(就是所有的action放到最后)
        -->
        <!-- 自定义拦截器 ,如果有拦截器,必须放在package标签内的第一位-->
        <interceptors>
              <!-- 在这里可以添加自己的拦截器
              <interceptor name="myInterceptor" class="自定义pojo类"></interceptor>
              -->
              <interceptor-stack name="myInterceptorStack">
                    <!--  
                    <interceptor-ref name="myInterceptor"></interceptor-ref>
                    -->
                    <interceptor-ref name="defaultStack"></interceptor-ref>
              </interceptor-stack>
        </interceptors>  
         
        <global-results>
              <result></result>
        </global-results>
        
        <action name="companyAndDistributeAction" class="companyAndDistributeAction" method="saveTask">
             <!-- 要创建/hzmlFile文件夹,否则会报找不到文件 -->
            <param name="savePath">/hzmlFile</param>
            <result name="saveTask">/ActionIntroduction.jsp</result> 
        </action>
        
        <!-- 访问主页 -->
        <action name="visitMainPage" class="login" method="visitMainPage">
             <result name="visitMainPage">/index.jsp</result> 
        </action>
        <!-- 用户登录 -->
        <action name="userLogin" class="login" method="userLogin">
             <result name="success">/ActionIntroduction.jsp</result> 
        </action>
  </package>
</struts>

【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧!  详情请点击

网友评论

hjzgg
文章323篇 | 关注12
关注
面向阿里云ECS实例、HPC和Docker的文件存储服务。 查看详情
集音视频上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。 查看详情
基于阿里云快速搭建海量基因数据上传、存储到分析挖掘的一体化解决方案。极大提升基因数据的解读效... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航