在Django中如何获取上传文件的大小并以KB/MB单位在模板中展示
表单上传ZIP文件后获取并转换文件大小为KB/MB单位的实现方案
前端场景(提交上传前在页面模板展示)
上传时可以直接通过浏览器原生API拿到文件大小,无需请求后端:
- 首先获取上传文件的原生对象:
const zipFile = document.querySelector('input[type="file"]').files[0] - 调用
zipFile.size属性即可得到文件的字节(B)数值 - 用通用单位转换函数处理后直接渲染到页面模板即可,转换函数示例:
function formatFileSize(bytes) { if (bytes < 1024) return `${bytes} B` // 转换为KB if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB` // 转换为MB return `${(bytes / (1024 * 1024)).toFixed(2)} MB` }
- 调用示例:
const showSize = formatFileSize(zipFile.size),把showSize直接插入对应模板位置即可。
后端场景(上传完成后在服务端渲染的模板展示)
后端接收文件后可直接读取文件字节大小,转换后传入模板渲染:
- 不同后端语言获取文件字节数的方法:
- Python(Flask/Django):
request.files['upload_file'].content_length或文件保存后调用os.path.getsize(文件存储路径) - PHP:
$_FILES['upload_file']['size']或文件保存后调用filesize(文件存储路径) - Java:上传的File对象调用
length()方法
- Python(Flask/Django):
- 单位转换逻辑和前端完全一致,换算后保留2位小数即可传入模板展示。
注意:如果需要做文件大小限制校验,建议前后端同时做校验,前端做体验优化,后端做最终校验避免前端篡改绕过。
内容的提问来源于stack exchange,提问作者Waqart
相关产品推荐
相关产品推荐

