2014-09-01 132 views
0

我已成功上传单个文本文件Google Cloud Storage。但是,当我尝试上传whole folder,它提供了许可denied error.如何使用Python API在Google云端存储上上传文件夹

filename = "d:/foldername" #here test1 is the folder. 


Error: 
Traceback (most recent call last): 
    File "test1.py", line 142, in <module> 
    upload() 
    File "test1.py", line 106, in upload 
    media = MediaFileUpload(filename, chunksize=CHUNKSIZE, resumable=True) 
    File "D:\jatin\Project\GAE_django\GCS_test\oauth2client\util.py", line 132, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "D:\jatin\Project\GAE_django\GCS_test\apiclient\http.py", line 422, in __init__ 
    fd = open(self._filename, 'rb') 
IOError: [Errno 13] Permission denied: 'd:/foldername' 
+0

对于整个文件夹。?我认为您需要检查https://developers.google.com/appengine/docs/python/blobstore/#Python_Uploading_a_blob – 2014-09-01 07:16:55

+0

将文件夹压缩并上传。 – voscausa 2014-09-01 11:49:02

回答

1

我认为纯粹filename = "D:\foldername"是不是源代码足够的信息。我也不确定这是甚至可能的..通过网络界面,您也可以上传文件或创建文件夹,然后上传文件。

你可以保存的文件夹名称,然后创建它(我从来没有用过谷歌的应用程序内引擎,但我想这应该是可能的),然后上传内容到新文件夹

0

的文件夹是一个包含对文件和目录的引用的编目结构。该库不会接受文件夹作为参数。

据我了解,您的使用案例是上传到GCS保留本地文件夹结构。为了达到这个目的,你可以使用os python模块并创建一个递归函数(例如process_folder),它将路径作为参数。此逻辑可用于此功能:

  1. 使用os.listdir()方法获取源路径中的对象列表(将返回文件和文件夹)。
  2. 迭代第1步中的列表以通过os.path.isdir()方法从文件夹中分离文件。
  3. 迭代文件并使用调整的路径(例如path +“/”+ file_name)上载它们。
  4. 迭代进行递归调用的文件夹(例如process_folder(path + folder_name))。

这将是必要的两条路径的工作:

  1. 实时系统路径(例如,“/用户/用户/ .../upload_folder /文件夹名”)与os模块使用。
  2. GCS文件上传的虚拟路径(例如“upload”+“/”+ folder_name +“/”+ file_name)。

不要忘记实施参考文献[1]中的指数回退来处理500个错误。您可以在[2]处使用Drive SDK示例作为参考。

[1] - https://developers.google.com/storage/docs/json_api/v1/how-tos/upload#exp-backoff
[2] - https://developers.google.com/drive/web/handle-errors

相关问题