在Django中发送文件上传进度%,可以通过以下步骤实现:
request.FILES
获取上传的文件对象。chunks()
方法来实现文件上传的分块处理。这样可以在上传过程中获取文件的上传进度。progress
事件监听上传进度的变化,并更新进度条的显示。下面是一个示例代码,演示如何在Django中发送文件上传进度%:
# views.py
from django.http import JsonResponse
def upload_file(request):
if request.method == 'POST' and request.FILES.get('file'):
file = request.FILES['file']
total_size = file.size
uploaded_size = 0
with open('path/to/save/file', 'wb+') as destination:
for chunk in file.chunks():
destination.write(chunk)
uploaded_size += len(chunk)
progress = int(uploaded_size / total_size * 100)
# 返回上传进度给前端
response_data = {'progress': progress}
return JsonResponse(response_data)
return JsonResponse({'error': '文件上传失败'})
# template.html
<script>
function uploadFile() {
var fileInput = document.getElementById('file-input');
var file = fileInput.files[0];
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(e) {
if (e.lengthComputable) {
var progress = Math.round((e.loaded / e.total) * 100);
// 更新进度条的显示
document.getElementById('progress-bar').style.width = progress + '%';
}
});
xhr.open('POST', '/upload/', true);
var formData = new FormData();
formData.append('file', file);
xhr.send(formData);
}
</script>
<form>
<input type="file" id="file-input">
<button type="button" onclick="uploadFile()">上传</button>
</form>
<div id="progress-bar"></div>
这个示例代码中,upload_file
视图函数接收文件上传请求,并通过循环读取文件的分块数据来实现文件上传的分块处理。在每个分块处理的过程中,计算已上传的文件大小与文件总大小的比例,并将这个比例通过JSON格式返回给前端。前端通过XHR2对象的progress
事件监听上传进度的变化,并更新进度条的显示。
请注意,这只是一个简单的示例,实际应用中可能需要根据具体需求进行适当的修改和优化。
领取专属 10元无门槛券
手把手带您无忧上云