我django-storages
在Django 2.x中使用手动上传文件而没有任何模型。
这是我使用 Django REST Framework (DRF) 的实现
class MediaListCreateView(generics.ListCreateAPIView):
"""
List and create media
"""
serializer_class = MediaSerializer
parser_classes = [FileUploadParser]
upload_path = 'uploads/media/'
def post(self, request, *args, **kwargs):
if 'file' not in request.data:
raise ParseError('Empty content')
file = request.data.get('file')
file_ = default_storage.open('{}{}'.format(self.upload_path, file.name), 'w')
file_.write(file.read())
file_.close()
return Response('Success', status=status.HTTP_200_OK)
该文件保存在S3 存储桶中,但现在我想在响应中返回上传文件的完整 URL,而不是Success
.
如何获取上传文件的完整 URL?
这settings
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(os.path.dirname(BASE_DIR), 'static_my_project')
]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'static_root')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'media_root')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_STORAGE_BUCKET_NAME = os.environ.get('S3_STORAGE', 'my_bucket')
AWS_DEFAULT_ACL = 'public-read'