ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 14437|回复: 16

[转载] Struts上传多个及N个文件的例子 [复制链接]

版主

江湖任我行

精华贴数
4
技术积分
19717
社区积分
26287
注册时间
2006-10-26
论坛徽章:
172
管理团队成员
日期:2011-05-07 01:45:08红孩儿
日期:2009-01-13 22:01:26铁扇公主
日期:2009-01-13 22:01:19夏洛特山猫
日期:2008-12-24 11:26:29华盛顿奇才
日期:2008-12-24 11:26:22亚特兰大老鹰
日期:2008-12-24 11:26:14奥兰多魔术
日期:2008-12-24 11:26:06迈阿密热火
日期:2008-12-24 11:25:582008北京奥运纪念徽章:排球
日期:2008-12-03 11:23:272008北京奥运纪念徽章:举重
日期:2008-12-03 11:22:07玉石琵琶
日期:2009-01-13 22:01:31九尾狐狸
日期:2009-01-13 22:01:38
发表于 2006-11-9 07:54:03 |显示全部楼层
最近一个基于Struts的项目中要用到上传多张图片到系统中,我在网上找了一下,发现大多数都是转载的例子,对项目的作用不大,故写下了这个例子,希望对有用到的朋友有所帮助。要求JDK1.5以上,lib库要包含如下jar文件:antlr.jar,commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-fileupload.jar,commons-logging.jar,commons-validator.jar,jakarta-oro.jar,struts.jar这些都是Struts中的jar文件以及Struts中的标签库文件。
    //可以转载,请保留出自http://www.javaresearch.org,作者anEngineer

一。web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <servlet>
        <servlet-name>actionServlet</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
             <param-name>config</param-name>
             <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
             <param-name>debug</param-name>
             <param-value>2</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <!-- struts actionServlet mapping-->
    <servlet-mapping>
        <servlet-name>actionServlet</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!-- welcome file list -->
    <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!-- error handle -->
    <error-page>
         <error-code>404</error-code>
         <location>/error.jsp</location>
    </error-page>
</web-app>

二。struts-config.xml文件

<?xml version="1.0" encoding="ISO-8859-1" ?>   
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
     <!-- form beans -->
     <form-beans>
         <form-bean name="uploadForm" type="org.apache.struts.action.DynaActionForm">
            <form-property name="type" type ="java.lang.String[]"/>
            <form-property name="name" type ="java.lang.String[]"/>
              <form-property name="file0" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file1" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file2" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file3" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file4" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file5" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file6" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file7" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file8" type ="org.apache.struts.upload.FormFile"/>
            <form-property name="file9" type ="org.apache.struts.upload.FormFile"/>
         </form-bean>
     </form-beans>
     <!-- forward -->
     <global-forwards>
          <forward name= "successed" path="/index.jsp"></forward>   
          <forward name= "failed" path="/error.jsp"></forward>   
     </global-forwards>
     <!-- action handle-->
     <action-mappings>
          <action path="/uploaded" type="com.fangchuang.action.UploadAction"
                  name="uploadForm" scope="request" input="/upload.jsp">
                <forward name="uploaded" path="/upload.jsp"></forward>
          </action>
     </action-mappings>
</struts-config>

版主

江湖任我行

精华贴数
4
技术积分
19717
社区积分
26287
注册时间
2006-10-26
论坛徽章:
172
管理团队成员
日期:2011-05-07 01:45:08红孩儿
日期:2009-01-13 22:01:26铁扇公主
日期:2009-01-13 22:01:19夏洛特山猫
日期:2008-12-24 11:26:29华盛顿奇才
日期:2008-12-24 11:26:22亚特兰大老鹰
日期:2008-12-24 11:26:14奥兰多魔术
日期:2008-12-24 11:26:06迈阿密热火
日期:2008-12-24 11:25:582008北京奥运纪念徽章:排球
日期:2008-12-03 11:23:272008北京奥运纪念徽章:举重
日期:2008-12-03 11:22:07玉石琵琶
日期:2009-01-13 22:01:31九尾狐狸
日期:2009-01-13 22:01:38
发表于 2006-11-9 07:54:23 |显示全部楼层
三。upload.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="gb2312" errorPage="error.jsp"%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="title"%>

<!-- 上传多个文件的jsp文件
     //可以随便转载,请保留出自http://www.javaresearch.org 作者anEngineer
-->
<html>
<head>
<title>上传多个文件的jsp文件</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="struts,多个文件,上传">
<meta http-equiv="description" content="This is a test">
</head>
<body>

<html:form action="uploaded.do" enctype="multipart/form-data" method="post">
    <table border="1" width="80%" align="center">
        <tr bgColor=#62bcff>
            <td align="left">文件类型</td>
            <td align="left">文件描述</td>
            <td align="left">文件名</td>
        </tr>

        <tr>
            <td align="left"><select name="type">
                <option value="1" selected>湖南省</option>
                <option value="2">湖北省</option>
                <option value="3">广东省</option>
                <option value="4">北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file0" size="35" value="">
            </td>
        </tr>


        <tr>
            <td align="left"><select name="type">
                <option value="1"selected>湖南省</option>
                <option value="2">湖北省</option>
                <option value="3">广东省</option>
                <option value="4">北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file1" size="35" value="">
            </td>
        </tr>
        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2"selected>湖北省</option>
                <option value="3">广东省</option>
                <option value="4">北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file2" size="35" value="">
            </td>
        </tr>
        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2"selected>湖北省</option>
                <option value="3">广东省</option>
                <option value="4">北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file3" size="35" value="">
            </td>
        </tr>
        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2">湖北省</option>
                <option value="3"selected>广东省</option>
                <option value="4">北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file4" size="35" value="">
            </td>
        </tr>
        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2">湖北省</option>
                <option value="3"selected>广东省</option>
                <option value="4">北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file5" size="35" value="">
            </td>
        </tr>
        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2">湖北省</option>
                <option value="3">广东省</option>
                <option value="4"selected>北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file6" size="35" value="">
            </td>
        </tr>
        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2">湖北省</option>
                <option value="3">广东省</option>
                <option value="4"selected>北京市</option>
                <option value="5">上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file7" size="35" value="">
            </td>
        </tr>
        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2">湖北省</option>
                <option value="3">广东省</option>
                <option value="4">北京市</option>
                <option value="5"selected>上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file8" size="35" value="">
            </td>
        </tr>


        <tr>
            <td align="left"><select name="type">
                <option value="1">湖南省</option>
                <option value="2">湖北省</option>
                <option value="3">广东省</option>
                <option value="4">北京市</option>
                <option value="5"selected>上海市</option>
            </select></td>

            <td align="left"><input type="text" name="name" value=""></td>

            <td align="left"><input type="file" name="file9" size="35" value="">
            </td>
        </tr>

        <tr>
            <td align="left"> </td>
            <td align="left"> </td>
            <td align="left"><input type="submit" value="上传文件" value="submit"
                onclick="return(confirm('你确认要上传文件吗?'))"></td>
        </tr>

    </table>
</html:form>

</body>
</html>

使用道具 举报

版主

江湖任我行

精华贴数
4
技术积分
19717
社区积分
26287
注册时间
2006-10-26
论坛徽章:
172
管理团队成员
日期:2011-05-07 01:45:08红孩儿
日期:2009-01-13 22:01:26铁扇公主
日期:2009-01-13 22:01:19夏洛特山猫
日期:2008-12-24 11:26:29华盛顿奇才
日期:2008-12-24 11:26:22亚特兰大老鹰
日期:2008-12-24 11:26:14奥兰多魔术
日期:2008-12-24 11:26:06迈阿密热火
日期:2008-12-24 11:25:582008北京奥运纪念徽章:排球
日期:2008-12-03 11:23:272008北京奥运纪念徽章:举重
日期:2008-12-03 11:22:07玉石琵琶
日期:2009-01-13 22:01:31九尾狐狸
日期:2009-01-13 22:01:38
发表于 2006-11-9 07:54:37 |显示全部楼层
四。还有两个简单jsp文件index.jsp,error.jsp可以自己写。

五。action文件

package com.fangchuang.action;
/**
* @author anEngineer 处理上传文件action
*/
public class UploadAction extends Action {
    public ActionForward execute(
            ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) {
        //可以随便转载,请保留出自http://www.javaresearch.org 作者anEngineer
        DynaActionForm fileForm = (DynaActionForm) form;
        String[] types = (String[]) fileForm.get("type";
        String[] names = (String[]) fileForm.get("name";

        FormFile file0 = (FormFile) fileForm.get("file0";
        FormFile file1 = (FormFile) fileForm.get("file1";
        FormFile file2 = (FormFile) fileForm.get("file2";
        FormFile file3 = (FormFile) fileForm.get("file3";
        FormFile file4 = (FormFile) fileForm.get("file4";
        FormFile file5 = (FormFile) fileForm.get("file5";
        FormFile file6 = (FormFile) fileForm.get("file6";
        FormFile file7 = (FormFile) fileForm.get("file7";
        FormFile file8 = (FormFile) fileForm.get("file8";
        FormFile file9 = (FormFile) fileForm.get("file9";

        Map<String, FormFile> fileMap = new HashMap<String, FormFile>();
        fileMap.put("file0" + "*" + types[0] + "*" + names[0], file0);
        fileMap.put("file1" + "*" + types[1] + "*" + names[1], file1);
        fileMap.put("file2" + "*" + types[2] + "*" + names[2], file2);
        fileMap.put("file3" + "*" + types[3] + "*" + names[3], file3);
        fileMap.put("file4" + "*" + types[4] + "*" + names[4], file4);
        fileMap.put("file5" + "*" + types[5] + "*" + names[5], file5);
        fileMap.put("file6" + "*" + types[6] + "*" + names[6], file6);
        fileMap.put("file7" + "*" + types[7] + "*" + names[7], file7);
        fileMap.put("file8" + "*" + types[8] + "*" + names[8], file8);
        fileMap.put("file9" + "*" + types[9] + "*" + names[9], file9);

        Set fileSet = fileMap.entrySet();
        Iterator iter = fileSet.iterator();

        // 取当前系统路径E:\Tomcat5\webapps\strutsUpload\ 其中strutsUpload为当前context
        String filePath = this.getServlet().getServletContext().getRealPath("/";
        // 保存文件的文件夹
        File savePath = new File(filePath + "UploadFiles\\";
        filePath = filePath+ "UploadFiles\\";
        if (!savePath.exists()) {
            savePath.mkdir();
        }
        while (iter.hasNext()) {
            Map.Entry unit = (Map.Entry) iter.next();
            String key = (String) unit.getKey();
            FormFile file = (FormFile) unit.getValue();   
            //文件大小符合要求,且是图片文件
            if ((file.getFileSize() >= 1)&& DealPhoto.isPhoto(file)) {
                //图片类别
                String photoType = key.substring(key.indexOf("*" + 1, key
                        .lastIndexOf("*");
                //图片描述
                String photoName = key.substring(key.lastIndexOf("*" + 1, key
                        .length());
               
                //存数据库操作,在数据库中保存文件的名称,类型,及在服务器上的相对路径
                //
               
                //判断是否重名
                if(DealPhoto.isFileExist(file.getFileName(),filePath))
                    DealPhoto.rename(file.getFileName(),filePath);
                try {
                 InputStream stream = file.getInputStream();// 把文件读入
                 // 建立一个上传文件的输出流
                 OutputStream bos = new FileOutputStream(filePath+file.getFileName());
                 int bytesRead = 0;
                 byte[] buffer = new byte[8192];
                 while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
                  bos.write(buffer, 0, bytesRead);// 将文件写入服务器
                 }
                 bos.close();
                 stream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }
        return mapping.findForward("uploaded";
        //还有其他可以改正的地方,如错误信息提示,把照片处理函数放到一个公用类,写文件操作等
        //可以随便转载,请保留出自http://www.javaresearch.org 作者anEngineer
    }
}

使用道具 举报

版主

江湖任我行

精华贴数
4
技术积分
19717
社区积分
26287
注册时间
2006-10-26
论坛徽章:
172
管理团队成员
日期:2011-05-07 01:45:08红孩儿
日期:2009-01-13 22:01:26铁扇公主
日期:2009-01-13 22:01:19夏洛特山猫
日期:2008-12-24 11:26:29华盛顿奇才
日期:2008-12-24 11:26:22亚特兰大老鹰
日期:2008-12-24 11:26:14奥兰多魔术
日期:2008-12-24 11:26:06迈阿密热火
日期:2008-12-24 11:25:582008北京奥运纪念徽章:排球
日期:2008-12-03 11:23:272008北京奥运纪念徽章:举重
日期:2008-12-03 11:22:07玉石琵琶
日期:2009-01-13 22:01:31九尾狐狸
日期:2009-01-13 22:01:38
发表于 2006-11-9 07:54:49 |显示全部楼层
六。照片处理类文件
package com.fangchuang.run;
/**
* 图片处理
* @author anEngineer
*
*/
public class DealPhoto {
    /**
     * 判断照片类型 .jpg .png .gif 目前只支持这三种格式
     * @param file
     * @return
     */
    public static boolean isPhoto(FormFile file) {
        String fileName = getString(file.getFileName());
        if (fileName.equals("")
            return false;
        if ((fileName.toLowerCase().endsWith(".jpg")
                || (fileName.toLowerCase().endsWith(".gif")
                || (fileName.toLowerCase().endsWith(".png"))
            return true;
        else
            return false;
    }

    /**
     *
     * @param str
     * @return
     */
    public static String getString(String str) {
        if (str == null)
            str = "";
        if (str.equals("null")
            str = "";
        str = str.trim();
        return str;
    }

    /**
     * 判断文件是否存在
     * @param fileName
     * @param dir
     * @return
     */
    public static boolean isFileExist(String fileName, String dir) {
        File files = new File(dir + fileName);
        return (files.exists()) ? true : false;
    }

    /**
     * 重命名
     * @param fileName
     * @param dir
     */
    public static void rename(String fileName, String dir) {
        String extendFile = "";
        if (isJpg(fileName))
            extendFile = ".jpg";
        else if (isGif(fileName))
            extendFile = ".gif";
        else if (isPng(fileName))
            extendFile = ".png";
        else
            extendFile = ".jpg";
        Random random = new Random();
        int add = random.nextInt(10000);
        String ret = fileName + add + extendFile;
        while (isFileExist(ret, dir)) {
            add = random.nextInt(10000);
            ret = fileName + add + extendFile;
        }
        File file = new File(dir + fileName);
        File reFile = new File(dir + ret);
        file.renameTo(reFile);
    }

    public static boolean isGif(String file) {
        if (file.toLowerCase().endsWith(".gif") {
            return true;
        } else {
            return false;
        }
    }

    public static boolean isJpg(String file) {
        if (file.toLowerCase().endsWith(".jpg") {
            return true;
        } else {
            return false;
        }
    }

    public static boolean isPng(String file) {
        if (file.toLowerCase().endsWith(".png") {
            return true;
        } else {
            return false;
        }
    }
}

    还有许多可以完善的地方,以后再补充!

使用道具 举报

版主

版主

精华贴数
10
技术积分
7777
社区积分
1110
注册时间
2004-7-29
论坛徽章:
36
世界杯纪念徽章
日期:2006-07-20 13:19:202008北京奥运纪念徽章:足球
日期:2008-05-21 09:08:152008北京奥运纪念徽章:垒球
日期:2008-05-21 09:08:15体育版块博采纪念徽章
日期:2008-07-03 19:47:132011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562008北京奥运纪念徽章:击剑
日期:2008-05-21 09:08:152008北京奥运纪念徽章:摔跤
日期:2008-05-21 09:08:152008北京奥运纪念徽章:举重
日期:2008-05-21 09:08:15
发表于 2006-11-9 08:20:28 |显示全部楼层
看过

使用道具 举报

注册会员

超级斑竹

精华贴数
0
技术积分
1946
社区积分
72
注册时间
2005-9-23
论坛徽章:
8
授权会员
日期:2006-10-19 11:36:01
发表于 2006-11-9 16:48:00 |显示全部楼层
顶,找个时间看看!

使用道具 举报

版主

生于忧患,死于安乐

精华贴数
2
技术积分
6389
社区积分
4152
注册时间
2004-10-26
论坛徽章:
67
授权会员
日期:2006-01-22 15:47:15灰彻蛋
日期:2011-12-23 12:07:02ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB8周年纪念徽章
日期:2009-10-09 21:30:16祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB元老
日期:2007-11-02 13:18:57会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2006-11-10 13:12:45 |显示全部楼层
继续努力

使用道具 举报

版主

生于忧患,死于安乐

精华贴数
2
技术积分
6389
社区积分
4152
注册时间
2004-10-26
论坛徽章:
67
授权会员
日期:2006-01-22 15:47:15灰彻蛋
日期:2011-12-23 12:07:02ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB8周年纪念徽章
日期:2009-10-09 21:30:16祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB元老
日期:2007-11-02 13:18:57会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
发表于 2006-11-10 13:13:00 |显示全部楼层
几年前做过

使用道具 举报

注册会员

初级会员

精华贴数
0
技术积分
73
社区积分
0
注册时间
2006-7-15
论坛徽章:
0
发表于 2007-11-24 21:49:18 |显示全部楼层
不错啊

使用道具 举报

注册会员

初级会员

精华贴数
0
技术积分
58
社区积分
0
注册时间
2007-4-15
论坛徽章:
0
发表于 2007-12-1 09:19:51 |显示全部楼层
支持!!

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部