【问题标题】:Google Cloud Storage PUT Not Saving As BinaryGoogle Cloud Storage PUT 未另存为二进制文件
【发布时间】:2013-06-01 08:01:53
【问题描述】:

使用带有 base64 数据的 PUT 请求将图像 (PNG) 上传到 Google 云存储时,图像 (PNG) 不会显示在浏览器中,并说它包含错误(在 FF 中查看时)。

在文本编辑器中打开图像文件后,我可以看到 base64 数据“data:image/png;base64,iVBORw...”,因此它不会被转换为二进制。

我是要上传二进制文件还是有办法让它与 HTTP 正文中的 base64 一起使用?

基本代码示例。

var base64img = "data:image/png;base64,iVB...";//截图 var xhr = new XMLHttpRequest(); xhr.open("PUT", ""); xhr.setRequestHeader("内容类型", "图片/png"); xhr.setRequestHeader("x-goog-acl", "public-read"); //尝试对文件设置公共读取 xhr.setRequestHeader("内容长度", base64img.length); // Chrome 抛出错误 xhr.send(base64img); 脚本>

根据我在网上阅读的内容,我认为这是可能的,但我找不到任何示例可以准确显示 PUT 的完成方式,以表明缺少什么才能使其正常工作。

【问题讨论】:

  • 我很困惑,为什么你要上传base 64 编码的说你什么时候可以简单地上传二进制数据?二进制上传的效率要高得多。
  • 因为我认为我在某处读到 base64 数据平均要小 33%,但现在你说我想知道我是否读错了。如果是这种情况,那么我将继续使用 blob。感谢您的回复。
  • 好吧,我确实读错了.. stackoverflow.com/questions/9722603/… .. :)
  • 是的,如果您希望获得更高的效率,您肯定不想使用 b64。值得我重写作为答案吗?
  • 嗨,再次感谢,是的,这就是我们关闭这些东西的方式吗?...我是堆栈新手。

标签: base64 put google-cloud-storage


【解决方案1】:

您通常希望避免使用 base64 编码,除非您确实需要它。在 base64 中编码会产生size overhead,并且在使用之前还需要解码,这实际上是 CPU 开销。本质上,如果您使用can't handle binary data 的协议和传输,您只希望 b64 编码某些内容。

因此,在您的情况下,我认为答案是避免使用 base64 并仅上传原始字节。在一般情况下,如果您在将某些内容存储到 Cloud Storage 之前对其进行了 base64 编码,则您需要在将其拉回的任何软件中计划一个解码步骤。

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 2013-08-13
    • 2018-07-13
    • 1970-01-01
    • 2013-04-25
    • 2014-10-17
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多