<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳

    只帖出關(guān)鍵代碼,如有問題可以回復(fù).
    前臺(tái)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;
    }

    // 動(dòng)態(tài)創(chuàng)建表單控件的方法
    var i = 1;
    function add()
    {
       
    // 動(dòng)態(tài)創(chuàng)建控件名稱
       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="選擇后即可動(dòng)態(tài)添加文件域"/>
    <input type="button" onclick="add();" value="多個(gè)附件" alt="手動(dòng)添加文件域"/>
    &nbsp;<font color=green><alt="不支持的文件類型將會(huì)被直接過濾掉">支持的文件類型(.rar,.zip,.txt,.sql,.ini,.jpg,.bmp,.gif)</a></font>
    </div>

    Action中的關(guān)鍵代碼:
    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);
                    
    // 初始化每一個(gè)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)
        
    {
            
    //只有選擇了文件時(shí)才上傳
            if ("".equals(file.getFileName()) || null == file.getFileName())
            
    {
                
    return ;
            }

            
    // 得到當(dāng)前網(wǎng)站的絕對路徑
            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異常");
            }

            
    // 數(shù)據(jù)庫操作
            Fileupload fileupload = new Fileupload();
            String basePath 
    = request.getScheme() + "://" + request.getServerName()
                    
    + ":" + request.getServerPort() + request.getContextPath()
                    
    + "/";
            fileupload.setFilename(basePath 
    + "/main/upload/" + file.getFileName());
            
    // 得到文件的擴(kuò)展名
            int point = file.getFileName().lastIndexOf(".");
            String ext 
    = file.getFileName().substring(point + 1);
            
    //擴(kuò)展名處理
            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:附件信息已經(jīng)成功保存到數(shù)據(jù)庫");
        }

    這樣就實(shí)現(xiàn)的動(dòng)態(tài)的多文件上傳.關(guān)鍵還是
    Hashtable files = bbsForm.getMultipartRequestHandler()
                    .getFileElements();
    的處理.
    其中的數(shù)據(jù)庫操作部分不是必須的.
    這是從我的項(xiàng)目中提取出來的,懶得寫個(gè)干凈的了.


    posted on 2008-01-31 18:27 々上善若水々 閱讀(5050) 評論(7)  編輯  收藏 所屬分類: Struts1.x

    評論

    # re: Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳  回復(fù)  更多評論   

    請問一下,bbsForm.getMultipartRequestHandler().getFileElements();
    bbsForm 是你的 Form 嗎?里面要定義屬性嗎?這個(gè)方法是根據(jù)什么獲取所有文件集體的呢?
    2008-05-06 11:39 | Freely

    # re: Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳  回復(fù)  更多評論   

    bbsForm.getMultipartRequestHandler().getFileElements();
    為什么只取到1個(gè)文件??
    我用System.out.print(files .size()); 結(jié)果為1
    2008-05-06 14:09 | snakee

    # re: Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳  回復(fù)  更多評論   

    這個(gè)是沒有問題的。這個(gè)是我項(xiàng)目中的代碼。

    請檢查你的 form類型enctype="multipart/form-data"

    否則只能得到一個(gè)。
    2008-05-06 15:27 | 々上善若水々

    # re: Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳[未登錄]  回復(fù)  更多評論   

    能不能把FORM中的相關(guān)代碼也給出來啊?我是菜鳥還不能領(lǐng)會(huì)FORM中是怎么實(shí)現(xiàn)的。謝謝了。
    2008-05-19 15:31 | 小鳥

    # re: Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳  回復(fù)  更多評論   

    太感謝了!!
    2009-02-20 17:35 | weihan

    # re: Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳[未登錄]  回復(fù)  更多評論   

    hhhh
    2009-11-05 16:26 | hh

    # re: Struts1.2實(shí)現(xiàn)動(dòng)態(tài)多文件(不定個(gè)數(shù))上傳[未登錄]  回復(fù)  更多評論   

    nnn
    2009-11-05 16:27 | hh
    主站蜘蛛池模板: 美女无遮挡拍拍拍免费视频| 精品日韩亚洲AV无码| 四虎永久免费网站免费观看| 精品熟女少妇AV免费观看| 国产精品成人免费福利| 99在线精品免费视频九九视| 中文字幕在线观看免费视频| 亚洲黄色免费在线观看| 亚洲免费观看在线视频| 可以免费看的卡一卡二| 四虎最新永久免费视频| 国产在线观看片a免费观看| 24小时日本在线www免费的| 两个人的视频高清在线观看免费 | 亚洲天堂视频在线观看| 亚洲成a人片77777老司机| 亚洲三级电影网站| 亚洲理论精品午夜电影| 亚洲日本乱码卡2卡3卡新区| 亚洲乱码国产乱码精华| 黄页视频在线观看免费| 一级有奶水毛片免费看| 99re免费视频| 我想看一级毛片免费的| 国产嫩草影院精品免费网址| 亚洲综合亚洲综合网成人| 亚洲精品美女久久久久99| 亚洲精品福利网站| 亚洲精品又粗又大又爽A片| 高清免费久久午夜精品| 精品免费tv久久久久久久| 久久WWW免费人成一看片| 国产精品另类激情久久久免费 | 中国xxxxx高清免费看视频| 无码日韩人妻av一区免费| 国产又大又粗又硬又长免费 | 妻子5免费完整高清电视| 日本一区二区三区日本免费| 中文字幕亚洲无线码a| 久久亚洲AV成人无码电影| 四虎必出精品亚洲高清|