使用Python脚本向本地Django服务器上传文件丢失后缀的问题
解决Django DRF文件上传后丢失后缀的问题
问题原因
你当前的上传脚本只传递了文件内容,没有提供完整的文件名(带后缀)和MIME类型信息,导致Django无法识别原始文件的后缀,最终保存的文件名丢失了.xlsx后缀。
修复方案
在构造请求的files参数时,需要以元组格式传入文件的完整信息:(完整文件名, 文件内容, MIME类型),这样Django就能正确解析并保留文件名后缀。
修改后的上传脚本
import requests url = "http://localhost:8000/upload/" file_path = "H:/MEGA_H/Data/uploaded/Book1.xlsx" filename = "Book1.xlsx" # xlsx文件对应的标准MIME类型 mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" with open(file_path, 'rb') as f: file_data = { "result_file": (filename, f.read(), mime_type) } # 重要:不要手动设置Content-Type请求头,requests会自动处理multipart/form-data格式 response = requests.post(url, files=file_data) if response.status_code == 201: print("File successfully uploaded") else: print(f"Failed to upload file. Status code: {response.status_code}, Response: {response.text}")
额外提示
- 确保你的Django模型中文件字段配置正确,比如:
from django.db import models class FileResult(models.Model): timestamp = models.DateTimeField(auto_now_add=True) result_file = models.FileField(upload_to='uploads/') # 可自定义存储子路径 - 原脚本中手动设置
headers={'Content-Type': 'multipart/form-data'}是错误的,requests会根据files参数自动生成包含boundary的正确请求头,手动设置会导致请求格式异常。
内容的提问来源于stack exchange,提问作者Dinh Truong Anh Phuong
相关产品推荐
相关产品推荐

