posts - 0,  comments - 17,  trackbacks - 0
          by xyz

          在使用表單傳送數(shù)據(jù)的時候,如果form 加了enctype="multipart/form-data" 這個屬性,那么表單請求傳到另一個jsp或servlet 里時
          是不能用request.getParameter()來獲取到各個表單元素的值的。
          可以通用這樣(上傳組件提供的API):

          boolean isMultipart = ServletFileUpload.isMultipartContent(request);
           if (isMultipart) {
            // Create a factory for disk-based file items
            org.apache.commons.fileupload.FileItemFactory factory = new DiskFileItemFactory();

            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);
            // Parse the request
            List /* FileItem */items = upload.parseRequest(request);

            // Process the uploaded items
            Iterator iter = items.iterator();
           
            while (iter.hasNext()) {
             org.apache.commons.fileupload.FileItem item = (org.apache.commons.fileupload.FileItem) iter
               .next();
             if (item.isFormField()) {
              String name = item.getFieldName();
              String value = item.getString("GBK");
              //out.println(name + "=" + value);
              params.put(name.toUpperCase(), value.trim());
             } ......
          ===============================================================================
          使用multipart/form-data上傳時,發(fā)送的請求和一般的http不一樣,需要轉(zhuǎn)化后才能讀其他參數(shù)。  
             
            如果你用spring,它提供一個MultiRequestResolver,只需要:  
            MultipartHttpServletRequest   multipartRequest   =   (MultipartHttpServletRequest)   request;  
            然后就能正常讀取參數(shù):  
            multipartRequest.getParameter("xxx");  
             
            以下是spring的處理方法,必須首先安裝commons-fileupload組件:  
             
            public   MultipartHttpServletRequest   resolveMultipart(HttpServletRequest   request)   throws   MultipartException   {  
            DiskFileUpload   fileUpload   =   this.fileUpload;  
            String   enc   =   determineEncoding(request);  
             
            //   use   prototype   FileUpload   instance   if   the   request   specifies  
            //   its   own   encoding   that   does   not   match   the   default   encoding  
            if   (!enc.equals(this.defaultEncoding))   {  
            fileUpload   =   new   DiskFileUpload();  
            fileUpload.setSizeMax(this.fileUpload.getSizeMax());  
            fileUpload.setSizeThreshold(this.fileUpload.getSizeThreshold());  
            fileUpload.setRepositoryPath(this.fileUpload.getRepositoryPath());  
            fileUpload.setHeaderEncoding(enc);  
            }  
             
            try   {  
            List   fileItems   =   fileUpload.parseRequest(request);  
            Map   parameters   =   new   HashMap();  
            Map   multipartFiles   =   new   HashMap();  
            for   (Iterator   it   =   fileItems.iterator();   it.hasNext();)   {  
            FileItem   fileItem   =   (FileItem)   it.next();  
            if   (fileItem.isFormField())   {  
            String   value   =   null;  
            try   {  
            value   =   fileItem.getString(enc);  
            }  
            catch   (UnsupportedEncodingException   ex)   {  
            logger.warn("Could   not   decode   multipart   item   '"   +   fileItem.getFieldName()   +  
                    "'   with   encoding   '"   +   enc   +   "':   using   platform   default");  
            value   =   fileItem.getString();  
            }  
            String[]   curParam   =   (String[])   parameters.get(fileItem.getFieldName());  
            if   (curParam   ==   null)   {  
            //   simple   form   field  
            parameters.put(fileItem.getFieldName(),   new   String[]   {   value   });  
            }  
            else   {  
            //   array   of   simple   form   fields  
            String[]   newParam   =   StringUtils.addStringToArray(curParam,   value);  
            parameters.put(fileItem.getFieldName(),   newParam);  
            }  
            }  
            else   {  
            //   multipart   file   field  
            CommonsMultipartFile   file   =   new   CommonsMultipartFile(fileItem);  
            multipartFiles.put(file.getName(),   file);  
            if   (logger.isDebugEnabled())   {  
            logger.debug("Found   multipart   file   ["   +   file.getName()   +   "]   of   size   "   +   file.getSize()   +  
                    "   bytes   with   original   filename   ["   +   file.getOriginalFilename()   +   "],   stored   "   +  
                    file.getStorageDescription());  
            }  
            }  
            }  
            /*****   注意   parameters   就是普通的text之類的字段的值   *****/  
            return   new   DefaultMultipartHttpServletRequest(request,   multipartFiles,   parameters);  
            }  
            catch   (FileUploadBase.SizeLimitExceededException   ex)   {  
            throw   new   MaxUploadSizeExceededException(this.fileUpload.getSizeMax(),   ex);  
            }  
            catch   (FileUploadException   ex)   {  
            throw   new   MultipartException("Could   not   parse   multipart   request",   ex);  
            }  
            }  
          ====================================================================================================
          <form name="userInfo" method="post" action="first_submit.jsp"  ENCTYPE="multipart/form-data">
          表單標(biāo)簽中設(shè)置enctype="multipart/form-data"來確保匿名上載文件的正確編碼。
          如下:
           <tr>
              <td height="30" align="right">上傳企業(yè)營業(yè)執(zhí)照圖片:</td>
              <td><INPUT TYPE="FILE" NAME="uploadfile" SIZE="34"  onChange="checkimage()"></td>
            </tr>
          就得加ENCTYPE="multipart/form-data"。
          表單中enctype="multipart/form-data"的意思,是設(shè)置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form- data,才能完整的傳遞文件數(shù)據(jù),進行下面的操作.
          enctype=\"multipart/form-data\"是上傳二進制數(shù)據(jù); form里面的input的值以2進制的方式傳過去。
          form里面的input的值以2進制的方式傳過去,所以request就得不到值了。 也就是說加了這段代碼,用request就會傳遞不成功,

          取表單值加入數(shù)據(jù)庫時,用到下面的:
           SmartUpload su = new SmartUpload();//新建一個SmartUpload對象
           su.getRequest().getParameterValues();取數(shù)組值
           su.getRequest().getParameter( );取單個參數(shù)單個值

          posted on 2008-03-14 10:52 xyz 閱讀(63080) 評論(5)  編輯  收藏 所屬分類: 我的文章

          FeedBack:
          # re: 表單form的enctype="multipart/form-data"使用體會[未登錄]
          2012-03-26 17:13 | s
          # re: 表單form的enctype="multipart/form-data"使用體會[未登錄]
          2013-01-29 14:28 | 111
          1111  回復(fù)  更多評論
            
          # re: 表單form的enctype="multipart/form-data"使用體會
          2013-03-29 11:33 | asdfsd
          asdf  回復(fù)  更多評論
            
          # re: 表單form的enctype="multipart/form-data"使用體會
          2013-03-29 11:33 | asdfsd
          sadf  回復(fù)  更多評論
            
          # re: 表單form的enctype="multipart/form-data"使用體會[未登錄]
          2015-07-27 18:52 | zxw
          受教了  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿

          隨筆檔案(1)

          文章分類(44)

          文章檔案(46)

          收藏夾(1)

          Adobe

          AOP

          API

          appServer

          BI

          c

          • c-free
          • codeblocks
          • codelite
          • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運行
          • codelite官網(wǎng)
          • dev-c++
          • Dev-C++是一個C&C++開發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
          • GCC
          • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

          Cache

          CMS

          DB

          eclipse

          FreeMarker

          hibernate

          html5

          ibatis

          java

          jquery

          js

          json

          Linux

          Log

          mail server

          mobile

          mysql

          oauth

          openID

          other

          PHP

          portal

          report

          Scheduler

          schema

          Security

          SOA

          spring

          struts

          UI原型設(shè)計

          w3c

          Wap

          webservice

          xml

          供應(yīng)鏈管理

          博客鏈接

          好網(wǎng)站

          工作流

          開源網(wǎng)

          招聘

          插件下載

          操作系統(tǒng)

          構(gòu)建可伸縮的系統(tǒng)

          構(gòu)建工具

          測試

          游戲

          源碼托管

          經(jīng)營

          資源

          金融/財務(wù)

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 仲巴县| 山阴县| 留坝县| 洞口县| 沂源县| 壤塘县| 定远县| 库尔勒市| 塔河县| 齐河县| 吴川市| 婺源县| 象山县| 蓝山县| 高州市| 盐城市| 普兰店市| 澎湖县| 开江县| 监利县| 宿松县| 宁武县| 英吉沙县| 孝昌县| 平安县| 巩义市| 宜兰县| 邹平县| 耿马| 始兴县| 宣武区| 五寨县| 乐山市| 嘉祥县| 文成县| 惠州市| 正宁县| 临夏市| 青河县| 南涧| 三都|