在S3上上载文件时删除绝对路径

2024-05-29 02:07:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在我的bucket中上传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,这是我的celery任务。在


Tags: 文件keynamefromhttpsimports3bucket
1条回答
网友
1楼 · 发布于 2024-05-29 02:07:58

函数set_contents_from_filename(key_name)知道无论是什么样的键名,它都会将它放在s3中。如果您的密钥名包含任何/,那么它将创建层次结构。对于你的情况,我建议你创造两条路。一个是包含文件的基本本地路径。基本本地路径将包含您要上载到s3的所有文件(使用os.path.join创建路径),然后是aws path,它是您要在s3存储桶中创建的层次结构。例如,可以将aws路径声明为:

/ExtraPaymentDocuments/Argus_ATM_e_surveillance/Gujarat/Ahmedabad/P3DCAM04

然后将本地文件名附加到将传递给函数new_key的参数key_name。 博托在这里会很好的。

示例: 在s3存储中创建一个您想要的s3路径,并添加一个基本本地路径,该路径包含要上载的所有文件。必须附加文件名才能创建文件。new_key函数将创建一个密钥,即您可以用来存储文件的路径。set_contents_from_filename函数将使用本地文件路径,并使用上面函数中提供的键(path)将该文件存储到s3。

^{pr2}$

相关问题 更多 >

    热门问题