[HOW TO]二进制数据的表单提交方法,BASE64? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
10iii
V2EX    问与答

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

  •  
  •   10iii 2013-12-20 10:42:39 +08:00 6139 次点击
    这是一个创建于 4342 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前端有一个大的arraybuffer,要走form提交到server端,希望能尽量压缩。

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

    请问对于二进制数据的form提交,BASE64是空间上最节约的的编码方式么?或者有其他思路?
    16 条回复    1970-01-01 08:00:00 +08:00
    alexrezit
        1
    alexrezit  
       2013-12-20 10:44:58 +08:00   1
    BASE64 挺浪费空间的... 直接提交就行了呗...
    FrankFang128
        2
    FrankFang128  
       2013-12-20 10:47:42 +08:00 via Android   1
    arraybuffer是什么,前端表示JS里没这东西。
    duhastmich
        4
    duhastmich  
       2013-12-20 10:51:02 +08:00   1
    multipart? 也可以不用表单直接二进制传
    loading
        5
    loading  
       2013-12-20 10:54:03 +08:00 via iPhone   1
    切成两个或以上传不就好了…
    FrankFang128
        6
    FrankFang128  
       2013-12-20 11:03:07 +08:00 via Android   1
    哦,这个还没关注过。直接把它交给FormData有什么问题
    dreampuf
        7
    dreampuf  
       2013-12-20 11:21:08 +08:00   1
    不能做成 <input type="file"> ?
    ETiV
        8
    ETiV  
       2013-12-20 11:24:27 +08:00 via iPhone   1
    Base64之后给flash.
    用flash解base64,上传压缩后的二进制
    yuelang85
        9
    yuelang85  
       2013-12-20 11:32:54 +08:00   1
    base64就变大了。。。。
    10iii
        10
    10iii  
    OP
       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
        11
    alexrezit  
       2013-12-20 12:10:13 +08:00 via iPad   1
    @10iii
    直接传不行? form data req 发过去原来是什么样还是什么样, 怎么会遇到 URL encode 的问题?
    joyjy
        12
    joyjy  
       2013-12-20 12:32:55 +08:00   1
    是不是 POST 的时候使用了 application/x-www-form-urlencoded ?照 @duhastmich 说的使用 multipart/form-data 呢?
    Mutoo
        13
    Mutoo  
       2013-12-20 12:59:07 +08:00   1
    @10iii post本身就支持二进制的,“不然怎么上传图片”。你在开发工具里看到的 uri encode 是浏览器为了显示自动帮你转的。
    icyalala
        14
    icyalala  
       2013-12-20 13:58:19 +08:00   1
    页面里就用<input type="file" />,表单类型就是multipart/form-data。
    要是直接用代码post,再继续加个gzip。
    loading
        15
    loading  
       2013-12-20 14:15:21 +08:00 via iPhone   1
    lz不会是说放到url不够长吧…
    10iii
        16
    10iii  
    OP
       2013-12-20 15:19:45 +08:00
    @icyalala
    @Mutoo
    @joyjy
    @duhastmich
    谢谢解答。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2818 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:00 PVG 22:00 LAX 06:00 JFK 09:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86