如何通过客户端本地文件绝对路径向Django后端上传文件?
核心结论:没有办法直接通过客户端本地文件的绝对路径完成上传操作,该限制来自浏览器的安全沙箱机制,和Django框架本身无关。
浏览器出于用户隐私与安全防护要求,禁止所有运行在沙箱内的JavaScript代码直接访问本地文件系统的任意路径,仅允许JS读取两类文件:一是用户主动通过<input type="file">控件手动选中的文件,二是用户主动拖放到页面指定区域的文件。任何试图通过路径字符串直接读取本地文件的操作都会被浏览器直接拦截。
适配你需求的可行实现方案
方案1:保留浏览器端实现,调整交互逻辑
该方案适合面向普通用户的公网场景,不需要用户额外安装程序:
- 第一步:先完成包含路径列表的主文件上传,后端解析出所有待上传的文件名称/路径列表后返回给前端渲染
- 第二步:前端渲染支持多选的文件上传控件
<input type="file" multiple id="batch-upload">,引导用户一次性选中所有待上传的本地文件 - 第三步:JS获取用户选中的文件对象集合,和之前解析得到的路径列表做匹配校验,确认所有文件都已选中后,逐个提交到Django后端的上传接口
你可以参考以下Django后端接收上传文件的示例代码:
# views.py from django.http import JsonResponse from django.views.decorators.http import require_http_methods from django.views.decorators.csrf import csrf_exempt @csrf_exempt @require_http_methods(["POST"]) def batch_upload_handler(request): uploaded_file = request.FILES.get("file") if not uploaded_file: return JsonResponse({"code": 1, "msg": "未获取到有效上传文件"}) # 自定义存储逻辑,可替换为保存到云存储、特定本地目录等 save_path = f"./upload_files/{uploaded_file.name}" with open(save_path, "wb+") as f: for chunk in uploaded_file.chunks(): f.write(chunk) return JsonResponse({"code": 0, "msg": "上传成功"})
方案2:内网自用场景用本地脚本实现
如果你的需求仅在内网环境自用,不需要面向普通公网用户,可以直接放弃浏览器方案,写一个Python本地脚本:读取主文件中的绝对路径,直接读取对应路径的本地文件,调用Django后端的上传接口提交即可,完全不需要考虑浏览器沙箱限制,实现逻辑更简单。
内容的提问来源于stack exchange,提问作者Jeet23
相关产品推荐
相关产品推荐

