V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
andybest
V2EX  ›  问与答

设计 API 接口,图片上传部分,有必要限制 client 使用 multipart/form-data 方式提交吗?

  •  
  •   andybest · 2013-11-23 22:13:38 +08:00 · 3902 次点击
    这是一个创建于 4018 天前的主题,其中的信息可能已经有所发展或是发生改变。
    参考了几个 API ,文件上传都需要 multipart/form-data 方式 POST ,这是为什么?
    我打算做成 client 普通 POST 方式提交,使用 Base64 Encode 图片文件,这样的设计比上面的有什么缺点?
    8 条回复    1970-01-01 08:00:00 +08:00
    oldcai
        1
    oldcai  
       2013-11-23 22:23:49 +08:00   ❤️ 1
    multipart/form-data传的二进制,可以理解为Base256,比Base64节约3倍的流量。
    专门做图片上传接口的,当然对带宽什么的要求节约。
    所以。
    Livid
        2
    Livid  
    MOD
       2013-11-23 22:24:29 +08:00
    为了让这个接口可以兼容浏览器?
    andybest
        3
    andybest  
    OP
       2013-11-23 22:26:11 +08:00
    @oldcai 非常感谢!

    所以。。。我设计成普通 POST 并且要求 Base64 Encode 的话会被用户嘲笑了?。。。
    andybest
        4
    andybest  
    OP
       2013-11-23 22:28:15 +08:00
    @Livid 不是,浏览器都支持 multipart/form-data 方式 POST
    主要不想增加 Client 多余代码,毕竟发送 multipart/form-data request 比普通的 request 代码复杂点
    tangzx
        5
    tangzx  
       2013-11-23 22:34:01 +08:00 via iPhone   ❤️ 1
    API 的设计其实应该考虑尽量多的情况,比如一个好的例子,GitHub 的 auth 既支持 http basic 也支持 OAuth ,既然想都想到了,就多支持一个吧
    andybest
        6
    andybest  
    OP
       2013-11-23 23:11:19 +08:00
    @tangzx 感谢
    你的意思是 API 接口同时支持 multipart/form-data 方式 POST 和 普通 POST 并且要求 Base64 Encode ?
    hepochen
        7
    hepochen  
       2013-11-23 23:32:20 +08:00   ❤️ 1
    @andybest 我们就是这样处理的,Base64是会导致获取的数据比源binary要大,但是一般情况下,没有3倍这么夸张。你自己弄一张图片对比一下就明白了。
    tangzx
        8
    tangzx  
       2013-11-24 09:33:24 +08:00 via iPhone   ❤️ 1
    @andybest 对,应该是说可用 multipart 和 encoded form ,如果用multipart 则可以用 二进制 替代base64
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2702 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:39 · PVG 11:39 · LAX 19:39 · JFK 22:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.