我们可以将二进制原始数据添加到<form>吗?

时间:2018-07-01 08:40:57

标签: javascript forms base64 html-form

是否可以将二进制原始数据添加到表单中,例如在此<div class="group"></div>字段中:

data

在我的用例中,我想使用toDataURL将图像从<form action="/upload" method="post"> <input type="hidden" id="data" /> <input type="submit" /> </form> 导出为JPEG,然后将base64 解码为二进制数据,然后将二进制数据添加到canvas,将可以提交。

为什么我不想仅发布base64编码的数据?因为我想节省客户端上载时间的1/3 /服务器上的带宽,众所周知,base64比二进制数据大1.333。

1 个答案:

答案 0 :(得分:1)

如果这是您的表格

    /*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
     'users' => [
         'driver' => 'database',
         'table' => 'users',
     ],
],

发送方式

<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> 

每个表单字段的值都被包围,浏览器会智能地计算边界,因为它遍历整个表单文本框,文本区域等(包括文件输入的原始文件字节流) 所有这些都是为了避免Delimiter collision。浏览器将使用相应的供应商前缀(例如webkit)在此边界之前加上前缀,最终,它始终是可靠的定界符。

现在,即使您可以进行这种低级的数据组装,但如果碰巧需要输入文件,创建一个真正可靠的定界符将是一项艰巨的任务。这就是为什么您应该让浏览器处理建议的事情基于Formdata的解决方案与此配合得很好。

------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-- 是唯一一种发送数据的机制,无论其性质如何,所有其他enctype(enctype='multipart/form-data'application/x-www-form-urlencoded)仅支持ASCII传输。text/plain本质上是一种告诉浏览器应使用哪种方案来提交表单的方法,但是该方案本身不仅仅限于表单,因为您可以看到使用相同表单的Formdata。