1.HTTP是如何提交表单的
当表单的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稍微有所不同,即空行后是附加的文件内容)。表单数据以--开始和结尾的行结束。
明白了表单数据的格式后,就可以编程解析表单数据了,我们可以把文件从表单数据中解析出来。