如何将原始字节数组写入谷歌云存储为二进制文件
我正在制作一个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会有所不同吗?还有一个类似的问题(在这里),但那完全不是我想做的事情。
值得一提的是,我其实并不需要写入文件——我只需要能够将它提供给用户,如果这有帮助的话。