如何将原始字节数组写入谷歌云存储为二进制文件

3 投票
1 回答
2144 浏览
提问于 2025-04-18 11:14

我正在制作一个AE应用程序,它可以通过算法生成一个原始的二进制文件(主要是16位字节,还有一些32位的头字节),用户可以下载这个文件。我可以用下面这段简单的Python代码生成这个数组并把它写入文件:

import numpy as np
import array as arr

toy_data_to_write = arr.array('h', np.zeros(10, dtype=np.int16))
output_file = open('testFile.xyz', 'wb')
toy_data_to_write.tofile(output_file)

显然,这在AE中是行不通的,因为不允许写入文件,所以我尝试在GCS中做类似的事情:

import cloudstorage as gcs

self.response.headers['Content-Type'] = 'application/octet-stream'
self.response.headers['Content-Disposition'] = 'attachment; filename=testFile.xyz'
testfilename = '/' + 'xyz-app.appspot.com' + '/testfile'
gcs_file = gcs.open(testfilename,'w',content_type='application/octet-stream')
testdata = arr.array('h', np.zeros(10, dtype=np.int16))
gcs_file.write(testdata)
gcs_file.close()
gcs_file = gcs.open(testfilename)
self.response.write(gcs_file.read())
gcs_file.close()

这段代码给了我一个TypeError错误,基本上是说write()函数只接受字符串,而不接受其他类型。需要注意的是,array模块的.tofile()函数在AE/GCS中是无法使用的。

有没有办法让我像这样写文件呢?我理解的是,我无法将字符串编码成原始二进制格式,这样才能正确写入(不是ASCII或其他格式),所以我想要的可能是不可能实现的? :( Blobstore会有所不同吗?还有一个类似的问题(在这里),但那完全不是我想做的事情。

值得一提的是,我其实并不需要写入文件——我只需要能够将它提供给用户,如果这有帮助的话。

1 个回答

1

使用 array.tostring 这个函数:

gcs_file.write(testdata.tostring())

撰写回答