在 S3 上上传文件时删除绝对路径
Remove absolute path while uploading file on S3
我正在尝试使用以下代码在我的存储桶中的 S3 上上传文件,它工作得非常好。
#!/usr/bin/python
import os
import boto
import boto.s3.connection
from boto.s3.key import Key
from boto.s3.connection import S3Connection
from datetime import datetime
try:
conn = boto.s3.connect_to_region('us-east-1',
aws_access_key_id = 'AKXXXXXXXXXXXXA',
aws_secret_access_key = 'cXXXXXXXXXXXXXXXXXXXXXXXXX2',
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
print conn
filename = '/home/rahul/GitDjangopostgres/AWSNewView/company/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf'
bucket = conn.get_bucket('bucketName', validate=False)
key_name = filename
print "file to upload",key_name
secure_https_url = 'https://{host}/{bucket}{key}'.format(
host=conn.server_name(),
bucket='bucketName',
key=key_name)
print "secure_https_url",secure_https_url
k = bucket.new_key(key_name)
mp = k.set_contents_from_filename(key_name)
print "File uploaded successfully"
except Exception,e:
print str(e)
print "error"
现在的问题是我的文件名为 '/home/rahul/GitDjangopostgres/AWSNewView/company/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf'
,它正在创建分层存储桶并存储我的文件。所以我得到的文件路径为 https://s3.amazonaws.com/bucketName/home/rahul/GitDjangopostgres/AWSNewView/company/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf
。我想将此层次结构更改为 https://s3.amazonaws.com/bucketName/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf
。是否有任何选项可以使用 boto 或者我应该使用 python,因为要在 s3 上上传文件需要文件的绝对路径,因为我正在使用 Django
,这是我的 [=15] =] 任务。
函数 set_contents_from_filename(key_name)
理解无论键名是什么,它都会按原样放入 s3 中。如果您的键名包含任何 /
那么它将创建层次结构。对于您的情况,我建议您创建两条路径。一个是您的基本本地路径,其中包含您的文件。基本本地路径将包含您要上传到 s3 的所有文件(使用 os.path.join
创建路径)然后是 aws 路径,这是您要在 s3 存储桶中创建的层次结构。例如,您可以将 aws 路径声明为:
/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04
然后将本地文件名附加到参数 key_name,然后将其传递给函数 new_key
。
Boto 在这里可以正常工作。
示例:
在您的 s3 存储中创建一个您想要的 s3 路径,并添加一个基本本地路径,其中包含您要上传的所有文件。必须附加文件名才能创建文件。 new_key
函数将创建一个密钥,即可用于存储文件的路径。 set_contents_from_filename
函数将采用本地文件路径并使用上面函数中提供的密钥(路径)将此文件存储到 s3。
k = bucket.new_key(s3_path + filename)
mp = k.set_contents_from_filename(base_local_path _ filename)
我正在尝试使用以下代码在我的存储桶中的 S3 上上传文件,它工作得非常好。
#!/usr/bin/python
import os
import boto
import boto.s3.connection
from boto.s3.key import Key
from boto.s3.connection import S3Connection
from datetime import datetime
try:
conn = boto.s3.connect_to_region('us-east-1',
aws_access_key_id = 'AKXXXXXXXXXXXXA',
aws_secret_access_key = 'cXXXXXXXXXXXXXXXXXXXXXXXXX2',
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
print conn
filename = '/home/rahul/GitDjangopostgres/AWSNewView/company/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf'
bucket = conn.get_bucket('bucketName', validate=False)
key_name = filename
print "file to upload",key_name
secure_https_url = 'https://{host}/{bucket}{key}'.format(
host=conn.server_name(),
bucket='bucketName',
key=key_name)
print "secure_https_url",secure_https_url
k = bucket.new_key(key_name)
mp = k.set_contents_from_filename(key_name)
print "File uploaded successfully"
except Exception,e:
print str(e)
print "error"
现在的问题是我的文件名为 '/home/rahul/GitDjangopostgres/AWSNewView/company/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf'
,它正在创建分层存储桶并存储我的文件。所以我得到的文件路径为 https://s3.amazonaws.com/bucketName/home/rahul/GitDjangopostgres/AWSNewView/company/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf
。我想将此层次结构更改为 https://s3.amazonaws.com/bucketName/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04/cecb834f-ae85-49e3-b8a1-a6nC^U)3GcZ)M62d643aa7-d047-498c-bf59-8__Invoice (7).pdf
。是否有任何选项可以使用 boto 或者我应该使用 python,因为要在 s3 上上传文件需要文件的绝对路径,因为我正在使用 Django
,这是我的 [=15] =] 任务。
函数 set_contents_from_filename(key_name)
理解无论键名是什么,它都会按原样放入 s3 中。如果您的键名包含任何 /
那么它将创建层次结构。对于您的情况,我建议您创建两条路径。一个是您的基本本地路径,其中包含您的文件。基本本地路径将包含您要上传到 s3 的所有文件(使用 os.path.join
创建路径)然后是 aws 路径,这是您要在 s3 存储桶中创建的层次结构。例如,您可以将 aws 路径声明为:
/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04
然后将本地文件名附加到参数 key_name,然后将其传递给函数 new_key
。
Boto 在这里可以正常工作。
示例:
在您的 s3 存储中创建一个您想要的 s3 路径,并添加一个基本本地路径,其中包含您要上传的所有文件。必须附加文件名才能创建文件。 new_key
函数将创建一个密钥,即可用于存储文件的路径。 set_contents_from_filename
函数将采用本地文件路径并使用上面函数中提供的密钥(路径)将此文件存储到 s3。
k = bucket.new_key(s3_path + filename)
mp = k.set_contents_from_filename(base_local_path _ filename)