<p>实际上,您的代码不会工作,因为您没有根据<a href="https://googleapis.dev/python/storage/latest/blobs.html#google.cloud.storage.blob.Blob.generate_signed_url" rel="nofollow noreferrer">documentation</a>正确使用<code>generate_signed_url()</code>方法。此外,我认为您将<code>blob</code>对象的方法<a href="https://googleapis.dev/python/storage/latest/blobs.html#google.cloud.storage.blob.Blob.generate_signed_url" rel="nofollow noreferrer">^{<cd2>}</a>与所示的示例方法<a href="https://cloud.google.com/storage/docs/access-control/signing-urls-manually#python-sample" rel="nofollow noreferrer">here</a>混淆了:</p>
<blockquote>
<pre><code>def generate_signed_url(service_account_file, bucket_name, object_name,
subresource=None, expiration=604800, http_method='GET',
query_parameters=None, headers=None):
</code></pre>
</blockquote>
<> P>另一件事你应该考虑的是到期日期应该在<强> UTC/<强>p>
<p>以下代码从已创建的对象创建<code>Signed URL</code>,但您可以修改它以满足您的需求:</p>
<pre><code>from google.oauth2 import service_account
from google.cloud import storage
from datetime import datetime, timezone, timedelta
#Define the service account key and project id
KEY='path/to/key.json'
PROJECT='PROJECT_ID'
#create a credential to initialize the Storage client
credentials = service_account.Credentials.from_service_account_file(KEY)
client = storage.Client(PROJECT,credentials)
#Define your Storage bucket and blob
bucketname = "BUCKET_NAME"
file = "BLOB_NAME"
#Get the time in UTC
ini_time_for_now = datetime.now(timezone.utc)
#Set the expiration time
expiration_time = ini_time_for_now + timedelta(minutes = 1)
#Initialize the bucket and blob
bucket = client.get_bucket(bucketname)
blob = bucket.get_blob(file)
#Get the signed URL
url = blob.generate_signed_url(expiration=expiration_time)
#Print the URL
print (url)
</code></pre>