我正在使用django-rest-framework。
有没有一种处理多文件上传的方法?似乎即使客户端通过Web浏览器发送多个文件,MultiPartParser也只会选择第一个文件。
我正在使用django-rest-framework。
有没有一种处理多文件上传的方法?似乎即使客户端通过Web浏览器发送多个文件,MultiPartParser也只会选择第一个文件。
MultiPartParser
(DRF使用)将files
作为MultiValueDict
返回。然后,当DRF将文件添加回传递给序列化程序的数据时,它会在request.Request._load_data_and_files()
中对数据(一个OrderedDict
)使用.update()
。结果是,如果使用相同键上传多个文件,则只有最后一个文件[1]会被保留并传递给序列化程序。FormView
中的.post()
方法。另一种选择是子类化解析器,并在返回之前调用dict()
以将files
MultiValueDict
转换为列表,而不是将其缩减为其最后一个值。我正在使用第二个选项,因为我已经在子类化解析器。
[1] https://docs.djangoproject.com/en/dev/_modules/django/utils/datastructures/(链接1)
[2] https://docs.djangoproject.com/en/dev/topics/http/file-uploads/#uploading-multiple-files(链接2)
class FileListSerializer ( serializers.Serializer ) :
files = serializers.ListField(
child=serializers.FileField( max_length=100000,
allow_empty_file=False,
use_url=False )
)
那么你可以通过从视图中调用序列化器来验证文件:
files = list( request.FILES.values() )
files_serializer = FileListSerializer( data={"files": files} )
if not file_serializer.is_valid() :
# handle error
...
MultiPartParser
,因此它肯定可以处理多个文件。你能展示一下你的代码吗? - mariodev