[HOW TO]二进制数据的表单提交方法,BASE64?

2013-12-20 10:42:39 +08:00
 10iii
前端有一个大的arraybuffer,要走form提交到server端,希望能尽量压缩。

我现在的做法是先 LZF压缩,再BASE64编码,然后传。

请问对于二进制数据的form提交,BASE64是空间上最节约的的编码方式么?或者有其他思路?
5803 次点击
所在节点    问与答
16 条回复
alexrezit
2013-12-20 10:44:58 +08:00
BASE64 挺浪费空间的... 直接提交就行了呗...
FrankFang128
2013-12-20 10:47:42 +08:00
arraybuffer是什么,前端表示JS里没这东西。
ijse
2013-12-20 10:50:08 +08:00
duhastmich
2013-12-20 10:51:02 +08:00
multipart? 也可以不用表单直接二进制传
loading
2013-12-20 10:54:03 +08:00
切成两个或以上传不就好了…
FrankFang128
2013-12-20 11:03:07 +08:00
哦,这个还没关注过。直接把它交给FormData有什么问题
dreampuf
2013-12-20 11:21:08 +08:00
不能做成 <input type="file"> ?
ETiV
2013-12-20 11:24:27 +08:00
Base64之后给flash.
用flash解base64,上传压缩后的二进制
yuelang85
2013-12-20 11:32:54 +08:00
base64就变大了。。。。
10iii
2013-12-20 11:59:53 +08:00
@alexrezit
@duhastmich
@FrankFang128
@yuelang85
解释一下:数据比较多,几百KB级别,又是给面向手机的,所以想尽量节省网络流量。
如果直接post提交arraybuff的二进制数据,实际上在传输的过程当中是uri encode成%FF%FF的形式传输的,那么针对一个32位的数据,实际传输“%FF%FF%FF%FF”,一共是12个ascii字符。
如果先转base64,实际上是6位转为一个ascii字符,那么32位只需要不到6个ascii字符,在传输上节省了一半空间。
想知道还有没有更高效的传输方式。
alexrezit
2013-12-20 12:10:13 +08:00
@10iii
直接传不行? form data req 发过去原来是什么样还是什么样, 怎么会遇到 URL encode 的问题?
joyjy
2013-12-20 12:32:55 +08:00
是不是 POST 的时候使用了 application/x-www-form-urlencoded ?照 @duhastmich 说的使用 multipart/form-data 呢?
Mutoo
2013-12-20 12:59:07 +08:00
@10iii post本身就支持二进制的,“不然怎么上传图片”。你在开发工具里看到的 uri encode 是浏览器为了显示自动帮你转的。
icyalala
2013-12-20 13:58:19 +08:00
页面里就用<input type="file" />,表单类型就是multipart/form-data。
要是直接用代码post,再继续加个gzip。
loading
2013-12-20 14:15:21 +08:00
lz不会是说放到url不够长吧…
10iii
2013-12-20 15:19:45 +08:00
@icyalala
@Mutoo
@joyjy
@duhastmich
谢谢解答。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/93902

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX