我有一個 django 應用程式,它允許使用 django-storages 將檔案上傳到 S3 存盤桶。該檔案用于需要批準的部分。一旦獲得批準,我想將檔案移動到不同的 S3 存盤桶。
class DesignData(models.Model):
file = models.FileField(storage=PublicMediaStorage())
...
class PublicMediaStorage(S3Boto3Storage):
location = "media"
default_acl = "public-read"
file_overwrite = False
批準后,我使用以下命令將檔案復制到新存盤桶中:
client.copy_object(
Bucket=settings.AWS_APPROVED_STORAGE_BUCKET_NAME,
CopySource=copy_source,
Key=design_data["s3key"],
)
該檔案被正確移動但是我需要更新我的物件。如何更新物件?嘗試類似的東西是myObject.file = "newbucket/myfile.txt"行不通的,因為它需要一個實際的檔案。我讀過我應該能夠更新 urlmyObject.file.url = "newbucketaddress/myfile.txt"但我得到一個錯誤AttributeError: can't set attribute。
django-storages 中是否有辦法使用 s3 更新現有檔案 s3 存盤桶?
uj5u.com熱心網友回復:
您可能必須手動構建新存盤桶的路徑。Boto3 檔案將指導您。
獲取存盤桶位置、名稱和物件鍵。您可以構建物件的路徑
uj5u.com熱心網友回復:
我最終使用了某種解決方法來解決我的問題。我最終更改了我的模型以包含另一個檔案,然后該檔案將存盤新的 s3 存盤桶位置。
class DesignData(models.Model):
file = models.FileField(storage=PublicMediaStorage())
approved_file = models.FileField(storage=ApprovedPublicMediaStorage())
我添加了 ApprovedPublicMediaStorage():
class PublicMediaStorage(S3Boto3Storage):
location = "media"
default_acl = "public-read"
file_overwrite = False
custom_domain = "newbucketlocation0.s3...."
我確實學到了艱難的方法,因此請確保包含,custom_domain否則如果已分配,它將在設定中使用 default_storage。將檔案復制到新存盤后,我洗掉舊檔案并更改為file = null僅approved_file包含一個 s3 物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417395.html
標籤:
