是否可以将二进制原始数据添加到表单,例如在此data
字段中:
<form action="/upload" method="post">
<input type="hidden" id="data" />
<input type="submit" />
</form>
?
在我的用例中,我想使用将图像从导出canvas
到JPEG toDataURL
,然后将base64解码为二进制数据,然后将二进制数据添加到中<form>
,以准备提交。
为什么我想不只是张贴的base64编码的数据?因为我想节省客户端上载时间/服务器上载带宽的1/3,并且众所周知base64大于二进制数据1.333。
如果这是你的表格
<form action="something.php" method="post" enctype="multipart/form-data">
<input type="text" name="firstname" value="Peter">
<input type="text" name="lastname" value="Quill">
<input type="file" name="photo">
<input type="submit" value="Submit">
</form>
它是这样发送的
------WebKitFormBoundarybHHp9cSVfgrymPhN
Content-Disposition: form-data; name="firstname"
Peter
------WebKitFormBoundarybHHp9cSVfgrymPhN
Content-Disposition: form-data; name="lastname"
Quill
------WebKitFormBoundarybHHp9cSVfgrymPhN
Content-Disposition: form-data; name="photo"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundarybHHp9cSVfgrymPhN--
每个表单字段的值都被包围,浏览器会智能地计算边界,因为它会遍历整个表单文本框,文本区域等(包括文件输入的原始文件字节流),以避免边界分隔符冲突。浏览器会在边界前添加前缀带有各自的供应商前缀(如webkit),但最后始终是可靠的分隔符。
现在,即使您可以进行低级的数据组装,但是如果碰巧需要输入文件,创建一个真正可靠的定界符将是一项繁重的任务。这就是为什么您应该让浏览器处理此类建议的基于Formdata的解决方案配合得很好。
enctype='multipart/form-data'
是唯一一种发送数据的机制,无论其性质如何,所有其他enctype(application/x-www-form-urlencoded
,text/plain
)仅支持ASCII传输。entype
(s)本质上是一种告诉浏览器应使用哪种方案来提交表单的方法,但是该方案本身并不限于单纯的表单,因为您可以看到使用相同表单的Formdata。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句