【问题标题】:Json Request URL with Base64 string带有 Base64 字符串的 Json 请求 URL
【发布时间】:2017-01-17 19:34:48
【问题描述】:

我有一张 reader.readAsDataURL(file) 已编码为 base64 字符串的图像。 我也用过 var imageBlob = ImageDataUrl.substring(ImageDataUrl.indexOf(",") + 1); 去掉data:image/png;base64,部分。

现在我必须使用 json 请求发送 base64 字符串 var link = "http://localhost:9002/AppAPI/rest/app/uploadImage?image="+imageBlob;.

但是邮递员没有收到任何响应,我猜测是 base64 字符串中的某些字符会影响 Http 请求 URL。

请问有什么办法可以解决这个问题吗?

【问题讨论】:

  • 尝试使用 POST 而不是 GET。
  • 我用过 POST 和 GET 都不起作用
  • 1) base64 不是发送数据的最佳选择 2) 您可以使用 filestack.com 之类的产品来让图片上传不受干扰 3) 如果您担心字符冲突,请使用 encodeURIComponent

标签: javascript json http base64 todataurl


【解决方案1】:

GET 绝对不是上传图片时使用的正确方法。 GETs must be both idempotent and safe(即可重复且只读,没有副作用)。事实上,RFC 7231 4.2.1 明确警告安全方法基于查询字符串参数执行具有副作用的操作:

例如,它是 基于 Web 的内容编辑软件通常在其中使用操作 查询参数,例如“page?do=delete”。如果这样的目的 资源要执行不安全的操作,那么资源所有者必须 使用保险箱访问时禁用或禁止该操作 请求方法。

对于图像上传,您可能想要执行 PUT,请求正文中包含图像内容,而不是查询字符串(因此无需对其进行 base64 编码)。将图像内容放在查询字符串中不太可能正常工作。大多数服务器都会对 URI 长度进行限制,几乎可以肯定,除了最小的 base64 编码图像之外,所有的图像都会超过这个限制。根据RFC 7230 3.1.1,当 URI 太长时,服务器必须向客户端发送 414 响应,但如果有不合规的服务器忽略该要求,我不会感到惊讶。 p>

您可能需要转义 base64 编码字符串末尾的 = 符号,但我建议完全废弃 base64 编码查询字符串参数。

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多