我找到了upload_from_file和upload_from_filename,但是是否有通过Python将整个文件夹上传到Cloud Storage的函数或方法?
答案 0 :(得分:0)
我不是直接在Python API中考虑,不是,但是在命令行工具gsutil
中有。只要您在从中调用Python的shell中的命令行上通过了身份验证,就可以通过python脚本进行系统调用以调用gsutil工具。
命令如下所示:
gsutil -m cp -r <foldername> gs://<bucketname>
答案 1 :(得分:0)
Google Cloud Storage并没有真正的“目录”概念,只是二进制Blob(如果您以这种方式命名,它们的键名可能看起来像目录)。因此,您当前使用Python的方法是合适的。
答案 2 :(得分:0)
这对我有用。将本地目录中的所有内容复制到Google云存储中的特定存储区名称/全路径(递归):
import glob
from google.cloud import storage
import os
def upload_local_directory_to_gcs(local_path, bucket, gcs_path):
assert os.path.isdir(local_path)
for local_file in glob.glob(local_path + '/**'):
if not os.path.isfile(local_file):
upload_local_directory_to_gcs(local_file, bucket, gcs_path + "/" + os.path.basename(local_file))
else:
remote_path = os.path.join(gcs_path, local_file[1 + len(local_path):])
blob = bucket.blob(remote_path)
blob.upload_from_filename(local_file)
upload_local_directory_to_gcs(local_path, bucket, BUCKET_FOLDER_DIR)
答案 3 :(得分:0)
这是对@Maor88 提供的答案的改进
该函数可用于上传文件或目录到gcs。
from google.cloud import storage
import os
import glob
def upload_to_bucket(src_path, dest_bucket_name, dest_path):
bucket = storage_client.get_bucket(dest_bucket_name)
if os.path.isfile(src_path):
blob = bucket.blob(os.path.join(dest_path, os.path.basename(src_path)))
blob.upload_from_filename(src_path)
return
for item in glob.glob(src_path + '/*'):
if os.path.isfile(item):
blob = bucket.blob(os.path.join(dest_path, os.path.basename(item)))
blob.upload_from_filename(item)
else:
upload_to_bucket(item, dest_bucket_name, os.path.join(dest_path, os.path.basename(item)))