1

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

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

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

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

4

1 回答 1

0

GET 绝对不是上传图像时使用的正确方法。GET必须是幂等且安全的(即可重复且只读且无副作用)。事实上,RFC 7231 4.2.1 明确警告安全方法基于查询字符串参数执行具有副作用的操作:

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

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

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

于 2016-09-10T03:27:50.520 回答