V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
andybest
V2EX  ›  问与答

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

  •  
  •   andybest · Nov 23, 2013 · 4338 views
    This topic created in 4548 days ago, the information mentioned may be changed or developed.
    参考了几个 API ,文件上传都需要 multipart/form-data 方式 POST ,这是为什么?
    我打算做成 client 普通 POST 方式提交,使用 Base64 Encode 图片文件,这样的设计比上面的有什么缺点?
    8 replies    1970-01-01 08:00:00 +08:00
    oldcai
        1
    oldcai  
    PRO
       Nov 23, 2013   ❤️ 1
    multipart/form-data传的二进制,可以理解为Base256,比Base64节约3倍的流量。
    专门做图片上传接口的,当然对带宽什么的要求节约。
    所以。
    Livid
        2
    Livid  
    MOD
    PRO
       Nov 23, 2013
    为了让这个接口可以兼容浏览器?
    andybest
        3
    andybest  
    OP
       Nov 23, 2013
    @oldcai 非常感谢!

    所以。。。我设计成普通 POST 并且要求 Base64 Encode 的话会被用户嘲笑了?。。。
    andybest
        4
    andybest  
    OP
       Nov 23, 2013
    @Livid 不是,浏览器都支持 multipart/form-data 方式 POST
    主要不想增加 Client 多余代码,毕竟发送 multipart/form-data request 比普通的 request 代码复杂点
    tangzx
        5
    tangzx  
       Nov 23, 2013 via iPhone   ❤️ 1
    API 的设计其实应该考虑尽量多的情况,比如一个好的例子,GitHub 的 auth 既支持 http basic 也支持 OAuth ,既然想都想到了,就多支持一个吧
    andybest
        6
    andybest  
    OP
       Nov 23, 2013
    @tangzx 感谢
    你的意思是 API 接口同时支持 multipart/form-data 方式 POST 和 普通 POST 并且要求 Base64 Encode ?
    hepochen
        7
    hepochen  
       Nov 23, 2013   ❤️ 1
    @andybest 我们就是这样处理的,Base64是会导致获取的数据比源binary要大,但是一般情况下,没有3倍这么夸张。你自己弄一张图片对比一下就明白了。
    tangzx
        8
    tangzx  
       Nov 24, 2013 via iPhone   ❤️ 1
    @andybest 对,应该是说可用 multipart 和 encoded form ,如果用multipart 则可以用 二进制 替代base64
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1131 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 23:04 · PVG 07:04 · LAX 16:04 · JFK 19:04
    ♥ Do have faith in what you're doing.