django - DRF上传到aws s3多个文件(超过1个)
问题描述
我来自 Postman 的标头- 我有成功上传到 AWS s3 存储桶图像的端点,但是当我尝试上传多个文件时,它上传了最后一个文件。我该如何解决?
我的观点:
class MediaViewSet(mixins.CreateModelMixin,
viewsets.GenericViewSet):
queryset = Media.objects.all()
serializer_class = MediaSerializer
permission_classes = (IsAuthenticated,)
我的序列化器:
class MediaSerializer(serializers.ModelSerializer):
class Meta:
model = models.Media
fields = ('uploaded_at', 'upload')
我的模型:
class Media(models.Model):
uploaded_at = models.DateTimeField(auto_now_add=True)
upload = models.FileField(storage=MediaStorage())
解决方案
我从来没有这样做过,但我认为它应该由浏览器通过标题处理。
所以RFC 7587说
4.3. 一个表单域的多个文件
表单域的表单数据可能包含多个文件。
[RFC2388] 建议使用嵌套的“多部分/混合”部分传输单个表单字段的多个文件。此用法已弃用。
为了匹配广泛部署的实现,必须通过在单独的部分中提供每个文件来发送多个文件,但所有文件都具有相同的“名称”参数。
接收旨在广泛适用的应用程序(例如,
多部分/表单数据解析库)还应该支持提供多个文件的旧
方法。
所以我认为你只需要发布
Content-Type: multipart/form-data; boundary=something; name="file"
更多关于Mozilla 文档或SO中的边界。
你能列出你发送的所有标题吗?
好的,所以你的标题是正确的。你有几个选择。
- 这个想法听起来不太好。如果可能,一个一个上传文件,因为 POST 应该返回 1 个新实体。
- 覆盖
create
方法,并在初始化序列化程序时传递many=True
给它或一一创建它们。 - 创建一个单独的视图,这样
UploadMultipleFiles(GenericViewSet)
您就可以完全控制正在发生的事情。 - 甚至
UploadMultipleFiles(CreateAPIView)
。
我认为您应该选择第二个选项,这样应该可以
def perform_create(self, serializer):
return serializer.save()
def create(self, request, *args, **kwargs):
uploaded_files = []
for uploaded_file in request.FILES:
serializer = self.get_serializer(upload=uploaded_file)
serializer.is_valid(True)
instance = self.perform_create(serializer)
uploaded_files.append(instance)
response_serializer = self.get_serializer(uploaded_files, many=True)
headers = self.get_success_headers(response_serializer.data)
return Response(response_serializer.data, status=status.HTTP_201_CREATED, headers=headers)
推荐阅读
- dynamics-crm - Dynamics 365 插件原像包含修改后的值
- hadoop - 无法启动 Hadoop Namenode - 语法错误
- javascript - 在 Vanilla JS 中使用 FadeIN/Out 显示多个图像的数组中的随机图像?
- python - Python GUI 一遍又一遍地混淆同一个短语
- c# - 广播 SendMessage 与调用超类委托
- c# - SerialPort DataReceived 事件线程
- python - 提高约束添加性能 Gurobi python
- mongodb - Is it possible to configure the logs with WARN, ERROR, INFO logging keys to ease the burden to monitor the system?
- reactjs - React pass state to nested components not working
- java - JNA maps Java boolean to -1 integer?