Python(Django) Ajax request.FILES InMemoryUploadedFile

在使用Django项目中,From表单提交了图片集合

var formdata = new FormData();
formdata.append("csrfmiddlewaretoken",'{{ csrf_token }}');
if ($('.js_file')[0].files.length > 0){
    $.each($('.js_file')[0].files, function (index,file) {
        formdata.append("file",file);
    })
}

当我在View.py中获取图片的时候打印

print('-----------:',request.FILES)

结果

<MultiValueDict: {'file': [<InMemoryUploadedFile: wx_friends.png (image/png)>, <InMemoryUploadedFile: wx_qrcode.png (image/png)>, <InMemoryUploadedFile: wx_wechat.png (image/png)>]}>

获取

imgs = request.FILES.get('file')

却只能获取到一个文件.
原因在于django 默认是只处理单个文件上传的,要一次性批量处理多个文件上传就得采用这种方法。MultiValueDict这种字典类是特殊定义的,如果需要取得list 需要调用 getlist方法

所以获取图片的正确方式是

for img in imgs:
    imageName = imagesPath + '/' + img.name
    file = open(imageName, 'wb')
    for chunk in img.chunks():
        file.write(chunk)
    file.close()

猜你喜欢

转载自blog.csdn.net/longlongValue/article/details/80279437
今日推荐