如果您希望将上传的文件直接存储到AWS S3,您可以使用 "django-storages" 并将Django文件存储后端设置为使用AWS S3。
这将允许您的Django项目在不需要手动重新上传文件到S3的情况下透明地处理存储到S3。
存储设置
您需要将以下配置添加到Django设置中:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'YOUR-ACCESS-KEY'
AWS_SECRET_ACCESS_KEY = 'YOUR-SECRET-ACCESS-KEY'
AWS_BUCKET_NAME = 'your-bucket-name'
AWS_STORAGE_BUCKET_NAME = AWS_BUCKET_NAME
示例代码:将上传文件存储到远程存储
这是您的视图的修改版本,使用Django的存储后端(使用django-storages)的handle_uploaded_file
方法来将上传的文件保存到远程目标。
注意:一定要在settings
中定义DEFAULT_FILE_STORAGE
和AWS密钥,以便django-storage
可以访问您的存储桶。
from django.core.files.storage import default_storage
from django.core.files import File
FILE_IO_CHUNK_SIZE = 128 * 2**10
class FileUploadView(APIView):
parser_classes = (FileUploadParser,)
def put(self, request, filename, format=None):
file_obj = request.data['file']
self.handle_uploaded_file(file_obj)
return self.get_response("", True, "", {})
def handle_uploaded_file(self, f):
"""
Write uploaded file to destination using default storage.
"""
storage = default_storage
fkey = 'sub-path-in-your-bucket-to-store-the-file'
content_type = 'image/jpeg'
file = storage.open(fkey, 'w')
storage.headers.update({"Content-Type": content_type})
f = open(path, 'rb')
media = File(f)
for chunk in media.chunks(chunk_size=FILE_IO_CHUNK_SIZE):
file.write(chunk)
file.close()
media.close()
f.close()
在这里可以查看有关如何访问远程存储的更多解释和示例: