form怎样正确post文件

Posted mthoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了form怎样正确post文件相关的知识,希望对你有一定的参考价值。

form在html中,是用于收集用户输入的,基本全部浏览器都支持form。给form加入method属性。就能实现将用户在form内控件输入的信息POST到制定地址。或发送GET请求。

写了以下一段代码。为了实现将用户选择的文件。POST到server。server端文件接收代码见这里,本文仅仅讲前端。不讲后端。form用于文件上传时。数据编码属性enctype必须设置为multipart/form-data。属性说明见这里

<form action="http://localhost:8000/upload/file=1.txt" enctype="multipart/form-data" method="post">
    <input type="file">
    <input type="submit" value="Send">
</form>

在FireFox中用FireBug查看HTTP报文:

Request Headers From Upload Stream
Content-Length 48
Content-Type multipart/form-data; boundary=---------------------------121841334829646
发现文件的内容根本不能POST到server。仅仅有"-----------------------------121841334829646--"能被发送到server。

用wireshark抓包也是相同的结果。


百思不得其解,就到stackoverflow发问了。

原来,form中的控件,仅仅有加了name属性的,才生效!


改正后的代码:

<form action="http://localhost:8000/upload/file=1.txt" enctype="multipart/form-data" method="post">
    <input type="file" name="xxx">
    <input type="submit" value="Send">
</form>
这是POST文件到server的全部数据:
-----------------------------30746427313740
Content-Disposition: form-data; name="xxx"; filename="1.txt"
Content-Type: text/plain

111
-----------------------------30746427313740--
当中仅仅有“111”才是文件的内容。

以上是关于form怎样正确post文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用 multipart/form-data 时不能正确发送带有 Unicode 的 POST 名称?

asp代码怎样实现无组件上传?

SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法

在php中不用表单怎样向另一个页面post参数并打开这个接值页面?

AFNetworking multipart/form-data POST 发送不正确的 JSON 字典数组

c#代码,模拟form表单发送post请求,上传文件(并带其他参数)