zoukankan      html  css  js  c++  java
  • 表单提交原理

    1.HTTP是如何提交表单的

    <form>标签的属性enctype设置以何种编码方式提交表单数据。可选的值有三个:

       application/x-www-form-urlencoded:

    这是默认的编码方式。它只处理表单域里的value属性值,采用这种变法方式的表单会将表单域的值处理成URL方式。

      multipart/form-data: 

    这种编码方式会以二进制流的方式来处理表单数据,这中编码方式会把文件域指定的文件内容也封装到请求参数里。

       text/plain:

    这种方式当表单的action属性值为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件。

    2.文件标签

       <input type="file" name="myfile">标签用来提交文件。要注意的是,这个标签的value值并不是所选择的文件内容,而是这个文件的完整路径名。正如前面所说的,表单在提交表单时,如果采用默认编码方式,文件的内容是不会被提交的。要提交文件内容要采用multipart/form-data编码方式,这需要在服务器端从提交的二进制流中读取文件内容。

    3.从客户端获得输入流

    Request.InputStream能够以二进制数据的方式获取请求主体(包含了表单域内容)。它包含了请求主体的内容。通过这个InputStrem可以读取表单的内容(包括文件内容)。

    4.文件上传简介

    通过Request.InputStream 方法获得表单数据流后,我们就可以手动处理表单数据了。

      先来看看form标签是怎么写的: 

    <form action="upload.ashx"enctype="mutltipart/form-data" method="post">

          <input type="file" name="f" />  

        <input type="text" name="comment"></input>  

          <input type="submit" name="btnUpload " value="上传" />  

    </form>    

          当表单的enctype被设置成multipart/form-data后, comment文本域的内容可以通过request.form[“comment”]来获得,文件f的内容只能通过request.inputstream来获得,但是request.inputstream并不是只包含了文件的内容,还包括了comment文本域的内容,看看打印出inputstream的内容:

        ------WebKitFormBoundaryQqpAxgR2Pgik6uyY

          Content-Disposition: form-data; name="f"; filename="hello.txt"

          Content-Type: application/octet-stream

          Hello!!!

          ------WebKitFormBoundaryQqpAxgR2Pgik6uyY

          Content-Disposition: form-data; name="comment"

          文件上传

          ------WebKitFormBoundaryQqpAxgR2Pgik6uyY

          Content-Disposition: form-data; name="buttom"

         上传

         ------WebKitFormBoundaryQqpAxgR2Pgik6uyY--

     

    可以看到提交的表单数据是混合了所有请求参数的数据。 从上面表单数据的内容可以看到,每个请求参数都以----开头的行开始,后面跟的字符不同的浏览器不同。接下来俩行是参数的描述,然后空行后接参数的值(对文件input稍微有所不同,即空行后是附加的文件内容)。表单数据以--开始和结尾的行结束。

    明白了表单数据的格式后,就可以编程解析表单数据了,我们可以把文件从表单数据中解析出来。

    原文链接:http://www.cnblogs.com/RascallySnake/archive/2010/07/27/1786160.html

     

     

  • 相关阅读:
    安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)
    VM虚拟机安装 常用Linux命令 网卡配置 (第二天)
    数据库的交互模式 常用的dos命令 (第一天)
    Validate US Telephone Numbers FreeCodeCamp
    Arguments Optional FreeCodeCamp
    Everything Be True FreeCodeCamp
    Binary Agents FreeCodeCamp
    Steamroller FreeCodeCamp
    Drop it FreeCodeCamp
    Smallest Common Multiple FreeCodeCamp
  • 原文地址:https://www.cnblogs.com/alexandra/p/5560054.html
Copyright © 2011-2022 走看看