成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用commons-fileupload時(shí),文件上傳與表單參數(shù)同時(shí)提交時(shí)的后臺(tái)代碼處理

JinB / 3379人閱讀

摘要:把表單是的是基于流的,只能獲取一次,重復(fù)獲取將為空當(dāng)上傳文件的控件與的字段混合時(shí)直接用一般是不行的下面的代碼進(jìn)行同時(shí)表單參數(shù)獲取和文件上傳這里取得字段名稱如果已經(jīng)存在此字段信息多選列表或多個(gè)同名的隱藏域等第一次取到這個(gè)名的字段這里而要對(duì)文

把Form表單是的enctype="multipart/form-data"是基于流的,只能獲取一次,重復(fù)獲取將為空,當(dāng)上傳文件的input控件與hidden的input字段混合時(shí),直接用request.getParameter一般是不行的.

下面的代碼進(jìn)行同時(shí)表單參數(shù)獲取和文件上傳:

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.servlet.ServletRequestContext;

...

 Map> getFieldMap(
            HttpServletRequest request) throws UnsupportedEncodingException {

        Map> fieldsMap;
        fieldsMap = (Map>) request
                .getAttribute(ServletFileUpload.MULTIPART_FORM_DATA);
        if (fieldsMap == null) {
            fieldsMap = new HashMap>();
            request.setAttribute(ServletFileUpload.MULTIPART_FORM_DATA,
                    fieldsMap);
        } else {
            return fieldsMap;
        }

        ServletFileUpload fu = new ServletFileUpload(new DiskFileItemFactory());
        List li = null;
        try {
            li = fu.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        int m = 0;
        if (li != null) {
            Iterator iter = li.iterator();
            while (iter.hasNext()) {
                FileItem fi = (FileItem) iter.next();
                if (fi.isFormField()) {
                    Vector vec = new Vector();
                    String fieldName = fi.getFieldName(); // 這里取得字段名稱
                    // 如果已經(jīng)存在此字段信息(多選列表或多個(gè)同名的隱藏域等)
                    if (fieldsMap.get(fieldName) != null) {
                        vec = (Vector) fieldsMap.get(fieldName);
                        vec.add(fi.getString(request.getCharacterEncoding()));
                    }
                    // 第一次取到這個(gè)名的字段
                    else {
                        // logger.info("name:" + fieldName + " value: "
                        // + fi.getString(request.getCharacterEncoding()));
                        vec.add(fi.getString(request.getCharacterEncoding()));
                        fieldsMap.put(fieldName, vec);
                    }
                } else {

                    List fileNames = (List) request
                            .getAttribute(UPLOADEDFILENAME_ATTRIBUTE);
                    if (fileNames == null) {
                        fileNames = new ArrayList();
                        request.setAttribute(UPLOADEDFILENAME_ATTRIBUTE,
                                fileNames);
                    }

                    String storePath = request.getSession().getServletContext()
                            .getRealPath(UPLOADEDFILEPATH);
                    try {
                        if (fi.getSize() > 0) {
                            //這里而要對(duì)文件重全名, 可能從之前的filename取得擴(kuò)展名,并白名單過(guò)濾
                            fi.write(new File("somefilename"+m++)); // 寫文件到服務(wù)器.
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return fieldsMap;
    }

這里用的是apache的common-fileupload模塊.
如果您使用maven構(gòu)建, 需要在pom.xml里添加:


    commons-fileupload
    commons-fileupload
    1.2

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68149.html

相關(guān)文章

  • Nginx 搭建圖片服務(wù)器

    摘要:搭建圖片服務(wù)器本章內(nèi)容通過(guò)和搭建圖片服務(wù)器。第二個(gè)部分是為了更好的體驗(yàn)上傳,批量上傳,回顯功能的富文本編輯器??偨Y(jié)搭建服務(wù)器的思維實(shí)現(xiàn)上傳圖片的功能上傳圖片的功能源碼搭建圖片服務(wù)器到這里就結(jié)束了,有什么不足的地方,請(qǐng)賜教。 Nginx 搭建圖片服務(wù)器 本章內(nèi)容通過(guò)Nginx 和 FTP 搭建圖片服務(wù)器。在學(xué)習(xí)本章內(nèi)容前,請(qǐng)確保您的Linux 系統(tǒng)已經(jīng)安裝了Nginx和Vsftpd。 N...

    jas0n 評(píng)論0 收藏0
  • SpringMVC入門筆記

    摘要:簡(jiǎn)介注解用于修飾的方法,根據(jù)的的內(nèi)容,通過(guò)適當(dāng)?shù)霓D(zhuǎn)換為客戶端需要格式的數(shù)據(jù)并且寫入到的數(shù)據(jù)區(qū),從而不通過(guò)視圖解析器直接將數(shù)據(jù)響應(yīng)給客戶端。并且這些解析器都實(shí)現(xiàn)了接口,在接口中有四個(gè)最為主要的接口方法。 SpringMVC 細(xì)節(jié)方面的東西很多,所以在這里做一篇簡(jiǎn)單的 SpringMVC 的筆記記錄,方便以后查看。 Spring MVC是當(dāng)前最優(yōu)秀的MVC框架,自從Spring 2.5版本...

    gekylin 評(píng)論0 收藏0
  • 7.1、使用Commons Fileupload上傳文件

    摘要:你可以通過(guò)在應(yīng)用程序上下文中添加一個(gè)解析器來(lái)啟用的處理。當(dāng)?shù)臋z測(cè)到一個(gè)請(qǐng)求時(shí),它會(huì)激活你聲明好的解析器,然后把這個(gè)解析器轉(zhuǎn)交給請(qǐng)求。解析器會(huì)把當(dāng)前的扭曲為一個(gè)支持文件上傳的。首先,創(chuàng)建一個(gè)帶有的表單,這樣用戶就可以通過(guò)這個(gè)表單上傳文件了。 ??最近家里的網(wǎng)出現(xiàn)了莫名其妙的問(wèn)題,連不上碼云了,所以把示例遷到了 github 上。本示例見這個(gè)項(xiàng)目的 master 分支的 ZestMulti...

    suosuopuo 評(píng)論0 收藏0
  • JavaWEB開發(fā)17——文件上傳下載

    摘要:文件上傳解析請(qǐng)求正文的每部分的內(nèi)容。獲取上傳文件的大小獲取上傳文件對(duì)應(yīng)的輸入流把上傳的文件保存到指定文件中。如果上傳的文件超過(guò),用磁盤作為緩存。如果自己用流實(shí)現(xiàn)的文件上傳,要在流關(guān)閉后,清理臨時(shí)文件。 一、文件的上傳和下載1、文件上傳的原理分析1.1文件上傳的必要前提:a、提供form表單,method必須是postb、form表單的enctype必須是multipart/form-d...

    Tangpj 評(píng)論0 收藏0
  • spring mvc處理表單

    摘要:處理表單在使用時(shí)提交表單遇到了如下問(wèn)題表單請(qǐng)求的通常有兩種和。前一種類似于請(qǐng)求用連接參數(shù),通常適用于字符串,第二種就通常適用于文件和參數(shù)混合的類型。對(duì)于第一種請(qǐng)求參數(shù),的大多數(shù)例子都默認(rèn)支持。 spring mvc處理表單 在使用spring mvc時(shí) 提交表單遇到了如下問(wèn)題 表單請(qǐng)求的headers通常有兩種content type: application/x-www-form-u...

    gaomysion 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<