fileupload多文件上传

   以前做过单文件的上传 现在公司有需求要做多文件上传。我也是参考网上的资料,其实原理很简单,改用数组就得了。我是基于struts2开发的 首先写个action


package org.usc.file;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.usc.utils.UploadConfigurationRead;
import com.opensymphony.xwork2.ActionSupport;

 
public class UploadAction extends ActionSupport
{

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private File[] upload;// 实际上传文件
    private String[] uploadContentType; // 文件的内容类型
    private String[] uploadFileName; // 上传文件名
    private List<UploadFiles> uploadFiles = new ArrayList<UploadFiles>();

    public String execute() throws Exception
    {
        try
        {
            String targetDirectory = ServletActionContext.getServletContext()
                    .getRealPath("/"+ UploadConfigurationRead.getInstance().getConfigItem("uploadFilePath").trim());// 获得路径
            System.out.println(targetDirectory);
            for (int i = 0; i < upload.length; i++)
            {
                String fileName = uploadFileName[i];// 上传的文件名
                String type = uploadContentType[i];// 文件类型
                String realName = UUID.randomUUID().toString()+ getExt(fileName);// 保存的文件名称,使用UUID+后缀进行保存

                File target = new File(targetDirectory, realName);
                FileUtils.copyFile(upload[i], target);// 上传至服务器的目录,一般都这样操作,
                                                        // 在把路径写入数据库即可

                UploadFiles uf = new UploadFiles();// 创建文件
                uf.setUploadContentType(type);
                uf.setUploadFileName(fileName);
                uf.setUploadRealName(realName);

                uploadFiles.add(uf);// 添加到需要下载文件的List集合中

                // uploadRealName[i]=UUID.randomUUID().toString();
                // System.out.println("uploadRealName:"+uploadRealName[i]);
                // for(File file:upload)
                // {
                // System.out.println("filename:"+file.getName());
                // }
                // System.out.println("filename:"+fileName);
                // System.out.println("Ext:"+getExt(fileName));
                // System.out.println("Type:"+type);
                // System.out.println(target.getPath());
            }
            ServletActionContext.getRequest().setAttribute("uploadFiles",
                    uploadFiles);

        } catch (Exception e)
        {
            e.printStackTrace();
            addActionError(e.getMessage());

            return INPUT;
        }

        return SUCCESS;

    }

    public File[] getUpload()
    {
        return upload;
    }

    public void setUpload(File[] upload)
    {
        this.upload = upload;
    }

    public String[] getUploadContentType()
    {
        return uploadContentType;
    }

    public void setUploadContentType(String[] uploadContentType)
    {
        this.uploadContentType = uploadContentType;
    }

    public String[] getUploadFileName()
    {
        return uploadFileName;
    }

    public void setUploadFileName(String[] uploadFileName)
    {
        this.uploadFileName = uploadFileName;
    }

    public static String getExt(String fileName)
    {
        return fileName.substring(fileName.lastIndexOf("."));
    }

}
然后就是struts.xml配置文件


<?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>
    <constant name="struts.i18n.encoding" value="utf8" />

<!-- 这个是配置上传文件大小 默认的是2M 因为需求我改成10M-->
    <constant name="struts.multipart.maxSize" value="104857600" />
    <package name="file" namespace="/" extends="struts-default">
        <action name="showUpload">
            <result>/upload.jsp</result>
        </action>
        <action name="upload" class="org.usc.file.UploadAction">
            <result name="input">/upload.jsp</result>
<!--            <result name="success">/upload_success.jsp</result>-->
            <result name="success">/download.jsp</result>
 
         
        </action>

        <action name="download" class="org.usc.file.DownloadAction">
            <result name="success" type="stream">
                <param name="contentDisposition">attachment;filename="${fileName}"</param>
                <param name="inputName">downloadFile</param>
            </result>
        </action>
    </package>
</struts>


最后就是jsp页面了 其中用了js动态生成文本框

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <title>upload</title>

    </head>
   

    <body>

        <script type="text/javascript">

<!--addMore函数可以提供上传多个文件上传-->

function addMore()
{

    var td = document.getElementById("more");
   
    var br = document.createElement("br");
    var input = document.createElement("input");
    var button = document.createElement("input");
   
    input.type = "file";
    input.name = "upload";
   
    button.type = "button";
    button.value = "   删除    ";
   
    button.onclick = function()
    {
        td.removeChild(br);
        td.removeChild(input);
        td.removeChild(button);
    }
   
    td.appendChild(br);
    td.appendChild(input);
    td.appendChild(button);
}

</script>

        <!--<h3><font color="red">上传文件类型后缀为doc,ppt,xls,pdf,txt,java,每个文件大小不能大于50M</font></h3>-->

        <table align="center" width="50%">
            <tr>
                <td>

                    <!--        <s:actionerror cssStyle="color:red"/>-->
                    <s:fielderror cssStyle="color:red" />

                </td>
            </tr>
        </table>
       
        <s:form action="upload.action" theme="simple" method="post"
            enctype="multipart/form-data">

            <table align="center" width="50%" border="1">
                <tr>
                    <td>
                        上传文件
                    </td>
                    <td id="more" >
                        <s:file name="upload"></s:file>
                        <input type="button" value="上传更多..." onclick="addMore()">
                    </td>
                </tr>
                <tr>
                    <td>
                        <s:submit value=" 确认 "></s:submit>
                    </td>
                    <td>
                        <s:reset value=" 重置 "></s:reset>
                    </td>
                </tr>

            </table>

        </s:form>

    </body>


</html>



你可能感兴趣的:(fileupload,多文件上传)