【问题标题】:How to write raw bytes to Google cloud storage with GAE's Python API如何使用 GAE 的 Python API 将原始字节写入 Google 云存储
【发布时间】:2013-08-19 21:12:44
【问题描述】:

我正在尝试修改用户表单提交的一些二进制数据,并将其写入谷歌云存储。我尝试关注Google document's example,但在写信时出现以下错误:

UnicodeDecodeError:“ascii”编解码器无法解码位置 34 中的字节 0xe5:序数不在范围内。

我的代码如下

gcs_file = gcs.open(filename,'w',content_type='audio/mp3')
gcs_file.write(buf)
gcs_file.close()

我尝试使用“wb”模式打开文件,但得到“无效模式 wb”。错误。

我在GCS's maillist 发现了一个类似的问题,它是关于 Java 的。 GCS 开发团队的建议是使用 writeChannel.write() 而不是 PrintWriter。有人可以建议如何让它在 Python 中工作吗?

【问题讨论】:

  • 哪一行产生错误? gcs.open.write ?
  • .write() 函数
  • 你能发布完整的堆栈跟踪吗?

标签: python google-app-engine google-cloud-storage


【解决方案1】:

我想问题是 gcs_file.write() 方法需要“str”类型的数据。由于您的 buf 类型是“unicode”并且显然包含一些 Unicode 字符(可能在 ID3 标签中),您会得到 UnicodeDecodeError。所以你只需要将 buf 编码为 UTF-8:

gcs_file = gcs.open(filename,'w',content_type='audio/mp3')
gcs_file.write(buf.encode('utf-8'))
gcs_file.close()

【讨论】:

  • 添加encode 行为我解决了这个问题。上传某些图像文件时出错。我的错误是:Expected str but got <type 'unicode'> 我使用 GAE Python
  • @Denisigo。抱歉回来晚了,刚刚发现这个问题仍然悬而未决。就我而言,因为我修改了应用程序架构,所以代码发生了很大变化,以至于我没有机会验证您的答案,但看起来很有希望。
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 2014-08-17
  • 2012-03-31
  • 2018-11-03
  • 2017-09-26
  • 1970-01-01
相关资源
最近更新 更多