2017-12-27 163 views
0

我成功地將文件上傳到谷歌存儲,但我想跳過創建一個文件,並使用StringIO而不是直接在谷歌存儲上創建文件。谷歌存儲python API - 上傳一個StringIO對象

由於我是新來的蟒蛇,我只是想用我用於上傳所創建的文件的標準方法:

def cloud_upload(self, buffer, bucket, filename): 
    buffer.seek(0) 
    client = storage.Client() 
    bucket = client.get_bucket(bucket) 
    blob = bucket.blob(filename) 
    blob.upload_from_filename(buffer) 

但我得到的錯誤:

類型錯誤:預期字符串或緩衝區

但是因爲我給了它的StringIO對象,我不知道爲什麼這不起作用?

回答

0

我不確定你怎麼調用cloud_upload函數,但你可以簡單地使用upload_from_filename函數來滿足你的需要。

def upload_blob(self, bucket_name, source_file_name, destination_blob_name): 
    """Uploads a file to the bucket.""" 
    storage_client = storage.Client() 
    bucket = storage_client.get_bucket(bucket_name) 
    blob = bucket.blob(destination_blob_name) 

    blob.upload_from_filename(source_file_name) 

    print('File {} uploaded to {}.'.format(
     source_file_name, 
     destination_blob_name)) 
+0

好,我試過了,但我得到類型錯誤:預期的字符串或緩衝區...當我嘗試使用緩衝區(StringIO對象),而不是一個文件... –

+0

你可以嘗試用'blob.upload_from_filename (filename ='/ local/path.txt')'? – patilnitin

+0

是的,我做了這樣的事情,但我想直接上傳StringIO對象 - 不先創建文件,然後上傳它! –