•已安装Python 3.7.2 •创建了GCP服务帐户并为其赋予了所有者角色,还启用了存储API并创建了一个云存储桶 •现在,我尝试使用python脚本将文件上传到GCP云存储文件夹,但不能。但是,通过使用相同的结构,我能够创建新的云存储分区并能够在其中编辑现有文件 •这里附有pythonscript
使用的参考: https://googleapis.github.io/google-cloud-python/latest/storage/blobs.html https://cloud.google.com/storage/docs/uploading-objects#storage-upload-object-python
from google.cloud import storage
bucket_name='buckettest'
source_file_name='D:/file.txt'
source_file_name1='D:/jenkins structure.png'
destination_blob_name='test/'
def upload_blob(bucket_name, source_file_name, destination_blob_name):
"""Uploads a file to the bucket."""
client = storage.Client.from_service_account_json('D:\gmailseviceaccount.json')
bucket = client.create_bucket('bucketcreate')
bucket = client.get_bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_name)
blob.upload_from_filename(source_file_name1)
print('File {} uploaded to {}.'.format(
source_file_name,
destination_blob_name))
if __name__ == '__main__':
upload_blob(bucket_name, source_file_name, destination_blob_name)
答案 0 :(得分:0)
我能够运行您的代码并对其进行调试。我将在下面使用我的内容,并说明所做的更改。
与您一样,我将服务帐户设置为所有者,并且能够上传。建议您在完成测试后,至少遵循privileges的最佳做法。
client.create_bucket
,因为存储桶是唯一的,所以我们不应该硬编码要创建的存储桶名称。您可以根据自己的需要提出命名约定,但是为了测试,我将其删除。 我修复了变量destination_blob_name
,因为您将其用作要放置文件的文件夹。这将不起作用,因为GCS不使用文件夹,而是仅使用文件名。发生的事情是您实际上是在将TXT文件“转换”到名为“ test”的文件夹中。为了更好地理解,我建议您仔细阅读How Sub-directories Work上的文档。
from google.cloud import storage
bucket_name='bucket-test-18698335'
source_file_name='./hello.txt'
destination_blob_name='test/hello.txt'
def upload_blob(bucket_name, source_file_name, destination_blob_name):
"""Uploads a file to the bucket."""
client = storage.Client.from_service_account_json('./test.json')
bucket = 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))
if __name__ == '__main__':
upload_blob(bucket_name, source_file_name, destination_blob_name)