Django Rest Framework上传文件:如何从请求体而非请求头获取文件名?
解决方法
换用MultiPartParser解析器
你当前使用的FileUploadParser必须依赖Content-Disposition头提取文件名,这就是为什么必须手动加头且文件名被覆盖的原因。换成MultiPartParser就能自动获取上传文件的原始文件名,无需再手动设置请求头。
修改后的视图代码:
@api_view(['POST']) @parser_classes([MultiPartParser]) @csrf_exempt @login_required def upload_image(request): file = request.FILES.get('file') if file: print(file.name) # 现在会输出上传的原始文件名,比如dog.jpg # 你的上传存储逻辑继续写在这里
调整Postman的上传方式
放弃binary模式上传,改用form-data:
- 在Postman中将请求体类型切换到
form-data - 键名填写
file(要和视图里request.FILES.get('file')的键对应) - 右侧类型选择
File,然后选择本地的dog.jpg文件 - 直接发送请求即可,后端会自动拿到原始文件名
补充说明
FileUploadParser的设计逻辑就是通过Content-Disposition头获取文件名,而二进制请求本身不带文件名元数据,必须依靠请求头传递。MultiPartParser是专门处理表单文件上传的解析器,会自动解析文件的原始信息,完全匹配你的需求。如果非要坚持用binary模式,只能让客户端通过URL参数或其他请求头传递文件名,反而更繁琐,所以优先推荐form-data的方式。
内容的提问来源于stack exchange,提问作者BoroBoro
相关产品推荐
相关产品推荐

