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

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

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

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

    在使用表單傳送數據的時候,如果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上傳時,發送的請求和一般的http不一樣,需要轉化后才能讀其他參數。  
       
      如果你用spring,它提供一個MultiRequestResolver,只需要:  
      MultipartHttpServletRequest   multipartRequest   =   (MultipartHttpServletRequest)   request;  
      然后就能正常讀取參數:  
      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">
    表單標簽中設置enctype="multipart/form-data"來確保匿名上載文件的正確編碼。
    如下:
     <tr>
        <td height="30" align="right">上傳企業營業執照圖片:</td>
        <td><INPUT TYPE="FILE" NAME="uploadfile" SIZE="34"  onChange="checkimage()"></td>
      </tr>
    就得加ENCTYPE="multipart/form-data"。
    表單中enctype="multipart/form-data"的意思,是設置表單的MIME編碼。默認情況,這個編碼格式是application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form- data,才能完整的傳遞文件數據,進行下面的操作.
    enctype=\"multipart/form-data\"是上傳二進制數據; form里面的input的值以2進制的方式傳過去。
    form里面的input的值以2進制的方式傳過去,所以request就得不到值了。 也就是說加了這段代碼,用request就會傳遞不成功,

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

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

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

    <2013年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發環境. 支持包括 Windows、Linux 和 Mac 系統下運行
    • codelite官網
    • dev-c++
    • Dev-C++是一個C&C++開發工具,它是一款自由軟件,遵守GPL協議。
    • 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原型設計

    w3c

    Wap

    webservice

    xml

    供應鏈管理

    博客鏈接

    好網站

    工作流

    開源網

    招聘

    插件下載

    操作系統

    構建可伸縮的系統

    構建工具

    測試

    • IETest
    • IE官網
    • OpenSTA
    • Siege
    • Siege是一個壓力測試和評測工具,設計用于WEB開發這評估應用在壓力下的承受能力

    游戲

    源碼托管

    經營

    資源

    金融/財務

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 亚洲国产精品国自产电影| 日韩在线a视频免费播放| 亚洲人成在线精品| 亚洲女久久久噜噜噜熟女| 黄在线观看www免费看| 一级女性全黄生活片免费看| 亚洲精品国产福利在线观看| 亚洲国产精品国产自在在线| 成人黄18免费视频| 一个人免费日韩不卡视频| 一级中文字幕免费乱码专区| 豆国产96在线|亚洲| 亚洲国产日韩视频观看| 亚洲国产综合在线| 亚洲国产日韩在线人成下载| 国产av无码专区亚洲av果冻传媒| 97免费人妻无码视频| 9久热精品免费观看视频| 在线亚洲v日韩v| 日韩大片在线永久免费观看网站| 亚洲精品无码少妇30P| 亚洲av永久无码| 色窝窝亚洲AV网在线观看| 亚洲AV无码专区亚洲AV桃| 亚洲熟妇丰满xxxxx| 午夜亚洲国产精品福利| 怡红院亚洲红怡院在线观看| 老外毛片免费视频播放| 一级人做人爰a全过程免费视频 | 少妇无码一区二区三区免费| 久久精品一本到99热免费| 国产99视频精品免费观看7| 日本v片免费一区二区三区| 亚洲欧洲精品成人久久曰影片 | 最近最新的免费中文字幕| 国产又粗又猛又爽又黄的免费视频 | 涩涩色中文综合亚洲| 91av免费在线视频| 国产高清不卡免费在线| 亚洲人成人无码网www国产| 蜜芽亚洲av无码精品色午夜|