Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1601|回复: 0

Struts1实现动态多文件(不定个数)上传

  [复制链接]

该用户从未签到

发表于 2011-8-1 10:05:16 | 显示全部楼层 |阅读模式
只帖出枢纽代码,如有题目可以回复.
前台jsp页:


<script language="javascript" type="text/javascript">
function
createElement(tagName, type, name)
{
var
element
=
[tr][td]
null
;
try
{
      element
=
document.createElement('
<
'
+
tagName
+
' name
=
"
'+name+'
"
size
=
30
onchange
=
"
add();
"
/>
');
      element.type
=
type;
      element.value
=
value;
   }
catch
(e)
{
   }
if
(
!
element)
{
      element
=
document.createElement(tagName);
      element.setAttribute(
"
type
"
, type);
   }
return
element;
}
//
动态创建表单控件的方法
var
i
=
[tr][td]
1
;
function
add()
{
//
动态创建控件名称
[tr][td]
var
name
=
[tr][td]
"
attachment
"
[tr][td]
+
i;
var
input1
=
createElement(
"
input
"
,
"
file
"
, name);
var
br
=
document.createElement(
"
<br />
"
);
var
files
=
document.getElementById(
"
files
"
);
   files.appendChild(br);
   files.appendChild(input1);
   i
++
;
}
</script>
<!--
************************
        附件
************************
-->
<div id="files">
<input type="file" size="30" name="attachment0" onchange="add();" alt="选择后即可动态添加文件域"/>
<input type="button" onclick="add();" value="多个附件" alt="手动添加文件域"/>
<font color=green><a alt="不支持的文件类型将会被直接过滤掉">支持的文件类型(.rar,.zip,.txt,.sql,.ini,.jpg,.bmp,.gif)</a></font>
</div>


Action中的枢纽代码:

FormFile[] formFile = null;
        // 得到所有的文件哀求元素
        Hashtable files = bbsForm.getMultipartRequestHandler()
                .getFileElements();
        if (files != null && files.size() > 0)
        
{
            // 初始化FormFile
            formFile = new FormFile[files.size()];
            // 得到files的keys
            Enumeration enums = files.keys();
            String fileKey = null;
            int i = 0;
            // 遍历枚举
            while (enums.hasMoreElements())
            
{
                // 取得key
                fileKey = (String) (enums.nextElement());
                System.out.println("key:" + fileKey);
                // 初始化每一个FormFile(接口)
                formFile= (FormFile) files.get(fileKey);
                // 分别上传
                upload(formFile, request, bbs);
                i++;
            }

        }


upload方法:

/** */
/**
     * 文件上传的方法
     *
     * @param file
     * @param request
     * @param bbs
     */
    public void upload(FormFile file, HttpServletRequest request, Bbs bbs)
   
{
        //只有选择了文件时才上传
        if ("".equals(file.getFileName()) null == file.getFileName())
        
{
            return ;
        }
        // 得到当前网站的绝对路径
        String path = this.getServlet().getServletContext().getRealPath("/");
        FileOutputStream fileOutput;
        try
        
{
            // 文件操纵
            fileOutput = new FileOutputStream(path + "main/upload/"
                    + file.getFileName());
            fileOutput.write(file.getFileData());
            fileOutput.flush();
            fileOutput.close();
            log.info("BbsAction:附件上传成功");
        }
        catch (FileNotFoundException e)
        
{
            log.info("BbsAction:找不到文件");
        }
        catch (IOException e)
        
{
            log.info("BbsAction:文件IO异常");
        }
        // 数据库操纵
        Fileupload fileupload = new Fileupload();
        String basePath = request.getScheme() + "://" + request.getServerName()
                + ":" + request.getServerPort() + request.getContextPath()
                + "/";
        fileupload.setFilename(basePath + "/main/upload/" + file.getFileName());
        // 得到文件的扩展名
        int point = file.getFileName().lastIndexOf(".");
        String ext = file.getFileName().substring(point + 1);
        //扩展名处理
        if ("jpg".equals(ext.toLowerCase()) "bmp".equals(ext.toLowerCase())
                "gif".equals(ext.toLowerCase()))
        
{
            ext = "img";
        }
        if ("rar".equals(ext.toLowerCase()) "zip".equals(ext.toLowerCase())
                "jar".equals(ext.toLowerCase()))
        
{
            ext = "rar";
        }
        if("txt".equals(ext.toLowerCase()) "sql".equals(ext.toLowerCase()) "ini".equals(ext.toLowerCase()))
        
{
            ext = "txt";
        }
        fileupload.setFileext(ext);
        fileupload.setFilesize(file.getFileSize());
        fileupload.setUptime(new Date());
        fileupload.setDowncount(0);
        fileupload.setUpuser(((User) request.getSession().getAttribute("user"))
                .getUserName());
        fileupload.setFlag((short) 0);
        fileupload.setAnnounceId(bbs.getAnnounceId());
        fileupload.setName(file.getFileName());
        fileuploadManager.save(fileupload);
        log.info("BbsAction:附件信息已经成功保留到数据库");
    }


这样就实现的动态的多文件上传.枢纽仍是

Hashtable files = bbsForm.getMultipartRequestHandler()
                .getFileElements();

的处理.
其中的数据库操纵部门不是必需的.
这是从我的项目中提掏出来的,懒得写个干净的了.
回复

使用道具 举报

  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-8-1 10:29:11 | 显示全部楼层
    谢谢楼主分享。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 08:46 , Processed in 0.497943 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表