2015-03-24 9 views
0

這是我到目前爲止在我的代碼中所具有的功能,但它並不像預期的那樣工作。在Python GAE中下載和保存.xls文件到Google雲存儲的正確方法是什麼?

def create_file(self, filename): 

    url = "google drive download url here" 

    form_fields = 
    { 
    "filename":"sample_file", 
    "url":url 
    } 

    form_data = urllib.urlencode(form_fields) 
    result = urlfetch.fetch(url=url, 
    payload=form_data, 
    method=urlfetch.POST, 
    headers={'Content-Type': 'application/x-www-form-urlencoded'}) 

    self.response.write('Creating file %s\n' % filename) 

    write_retry_params = gcs.RetryParams(backoff_factor=1.1) 
    gcs_file = gcs.open(filename, 
         'w', 
         content_type='text/plain', 
         options={'x-goog-meta-foo': 'foo', 
           'x-goog-meta-bar': 'bar'}, 
         retry_params=write_retry_params) 
    gcs_file.write(results) 
    gcs_file.close() 
    self.tmp_filenames_to_clean_up.append(filename) 
+0

解釋什麼是你期待,你得到的更多的瞭解,您可以提供更好的。 – 2015-03-24 23:14:17

+0

我想將.xls文件保存到Google Cloud存儲分區中。但事實並非如此。 – user3614533 2015-03-24 23:32:04

+0

似乎OP希望將特定文件從Google雲端硬盤遷移到Google雲端存儲。或者,如果您只是想將文件上傳到GCS,create_upload_url要簡單得多https://cloud.google.com/appengine/docs/python/ blobstore /函數 – HayatoY 2015-03-25 00:42:51

回答

2

由於https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/functions#open文件,

filename (REQUIRED) The file to open, in the format /bucket/object. For
example,/my_bucket/lyrics/southamerica/list5.txt

你舉的例子是"filename":"sample_file"要求的格式/bucket/object;它缺少存儲桶名稱和分隔斜線,因此其中(==要存儲什麼存儲)應該存儲?!

你有一個默認的水桶,如果您已經激活的谷歌雲控制檯中的API - 見https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/activate#Using_the_Default_GCS_Bucket - 在該桶免費配額,但你仍然需要告訴open使用它,如

filepath = '/{}/{}'.format(defbuck, filename) 

並通過filepath作爲open的第一個參數(請參閱我給出的有關如何確定默認存儲桶名稱的URL)。

0

您不能直接使用urlfetch結果,而是使用StringIO。

from StringIO import StringIO 
f = StringIO(result.content) 

然後

gcs_file.write(f.read()) 
相關問題