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()
Django框架结合AJAX技术上传PDF文件时,通常会使用HTML表单配合后端视图和文件处理库(如`django.core.files`)以及前端JavaScript库(如jQuery或axios)。以下是简单的步骤: 1. **HTML表单**: 创建一个包含文件选择输入的表单,通常是`<input type="file">`,加上`accept=".pdf"`属性限制只允许选择PDF文件。 ```html <form id="upload-form" enctype="multipart/form-data"> <input type="file" name="pdf_file" accept=".pdf"> <button type="submit">上传</button> </form> ``` 2. **AJAX请求**: 使用JavaScript(如jQuery)监听表单提交事件,在后台请求未完成时阻止默认提交,并发送AJAX请求。 ```javascript $('#upload-form').on('submit', function(event) { event.preventDefault(); // 阻止表单默认提交 let formData = new FormData(this); // 获取表单数据 $.ajax({ url: '{% url 'upload_pdf' %}', // Django URL路由 type: 'POST', data: formData, processData: false, contentType: false, success: function(response) { // 处理上传成功后的操作 }, error: function(xhr, status, error) { // 处理错误情况 } }); }); ``` 3. **Django视图**: 创建一个视图函数接收这个文件,保存到服务器上,并返回响应。你可以使用`request.FILES['pdf_file']`来访问上传的PDF文件。 ```python def upload_pdf(request): if request.method == 'POST': pdf_file = request.FILES['pdf_file'] # ... 进行文件验证和存储 return JsonResponse({'status': 'success', 'filename': pdf_file.name}) else: pass # 对GET请求做其他处理 ``` 4. **后端文件存储**: 你需要将PDF文件保存到服务器指定的目录,Django的`FileSystemStorage`或云存储服务(如AWS S3)都可以用来实现。 请注意,这只是一个基本的示例,实际应用中还需要考虑文件大小限制、错误处理、文件名冲突等问题。同时,为了保证安全,应避免直接上传未经验证的内容到服务器。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值