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

前台jsp页:

< script  language ="javascript"  type ="text/javascript" >
function createElement(tagName, type, name)
{
   
var element = 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 = 1;
function add()
{
   
// 动态创建控件名称
   var name = "attachment" + 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 ="手动添加文件域" />
&nbsp; < font  color =green >< 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[i] = (FormFile) files.get(fileKey);
                
// 分别上传
                upload(formFile[i], 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((
short0);
        fileupload.setAnnounceId(bbs.getAnnounceId());
        fileupload.setName(file.getFileName());
        fileuploadManager.save(fileupload);
        log.info(
"BbsAction:附件信息已经成功保存到数据库");
    }

这样就实现的动态的多文件上传.关键还是

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

的处理.
其中的数据库操作部分不是必须的.

原文:http://www.blogjava.net/supercrsky/articles/178722.html

你可能感兴趣的:(struts1)