
django中文件的上传问题
配置请求头: 确保在发送文件时,请求头包含正确的内容类型,如 构建文件信息: 包含文件名、文件内容和文件类型的元数据。 发送HTTP请求: 使用 创建API视图: 使用 验证和处理文件: 在 返回结果: 返回处理结果,例如文件路径。
发布日期:2021-05-14 15:20:33
浏览次数:9
分类:精选文章
本文共 3037 字,大约阅读时间需要 10 分钟。
Django 文件上传解决方案
在开始解决这个问题之前,首先要理解Django如何处理文件上传请求。这涉及到客户端和服务器端的协调工作,包括请求的发送、文件的接收和存储。
客户端(client.py)
如果需要将文件上传到服务器,主要步骤是:
enctype="multipart/form-data"
,这会告诉服务器这是一个文件上传请求。:requests.post()
方法将文件内容发送到指定的URL。这里是一个示例:
import requestsimport osBASE_DIR = os.path.dirname(os.path.abspath(__file__))if __name__ == "__main__": url = "http://127.0.0.1:8001/gen_model/predict/" while True: input_content = input('输入图片路径(按回车退出):').strip() if not input_content: input_content = 'test.png' if input_content == 'q': break file_path = os.path.join(BASE_DIR, 'media', input_content) if not os.path.exists(file_path): print('图片文件不存在!请检查路径是否正确。') continue file_name = os.path.basename(file_path) file_data = open(file_path, 'rb') # 提取文件扩展名 ext = os.path.splitext(file_path)[1] headers = {'_enetcode': 'multipart/form-data'} files = {'img': (file_name, file_data, 'image/' + ext)} response = requests.post(url, headers=headers, files=files) print(f"上传状态:{response.status_code}") print(f"预测结果:{response.text}")
Django 服务器端
接下来配置Django服务器端接收文件的逻辑:
APIView
来处理HTTP请求。post
方法中,获取文件,并将其存储到媒体文件夹。from django.views.decorators.csrf import csrf_exemptfrom django.views.generic.base import Viewfrom django.conf import settingsfrom django.shortcuts import redirectclass PredictView(View): @csrf_exempt def post(self, request): file = request.FILES.get('img', None) if not file: return redirect('/') file_path = os.path.join(settings.MEDIA_ROOT, '上传的图片') file_name = os.path.basename(file.name) file_ext = os.path.splitext(file.name)[1] file_path = os.path.join(file_path, file_name) # 创建目标路径 if not os.path.exists(os.path.dirname(file_path)): os.makedirs(os.path.dirname(file_path)) # 保存文件 with open(file_path, 'wb') as fp: for chunk in file.chunks(): fp.write(chunk) return redirect(f'/image/{file_path.split(os.path.sep)[-1:]}')
前端配置(HTML)
在页面中添加文件上传的表单,确保使用正确的enctype
:
图片上传 图片上传工具
媒体文件配置
确保Django的媒体文件配置:
在 settings.py 中:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')MEDIA_URL = '/media/'
在 URLs.py 中,确保有:
from django.urls import include, path urlpatterns = [ path('gen_model/predict/', include('predict.urls')), ]
3. **创建 include 模块(如果没有):**```pythonfrom django.urls import re_pathfrom . import PredictViewurlpatterns = [ re_path(r'^gen_model/predict/', PredictView.as_view()),]
注意事项
- 文件名处理: 确保文件名不包含有问题的字符,防止存储失败。
- 权限管理: 确保媒体文件夹有适当的权限权限,否则会导致权限错误。
- 缓存管理: 因为文件是在资源有限的云端存储,如果删除旧文件,需要清理媒体目录。
- 错误处理: 在接收文件时,增加异常处理,确保正确日志和提示。
- 验证文件类型: 可以对文件的MIME类型进行检查,确保只接收允许类型的文件。
通过以上步骤,Django文件上传应该能正常运行。你可以测试上传一个图片,看看是否能成功保存到服务器,并接收到预期的响应。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月14日 06时36分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Scala中的包
2019-03-11
参加阿里的Java面试经验
2019-03-11
Python微信公众号
2019-03-11
他来了他来了,他带着云栖大会的免费门票走来了
2019-03-11
Oracle笔记
2019-03-11
如何复用外部shell脚本
2019-03-11
JAVA集合类Collection浅析
2019-03-11
获取linux 主机cpu类型
2019-03-11
限流的算法有哪些?
2019-03-11
Failed to notify build listener.
2019-03-11
TextWiew单个线条
2019-03-11
Android Studio updating indices 一直刷新和闪烁
2019-03-11
个人购买服务器问题?
2019-03-11
pwntools编写技巧
2019-03-11
How2Heap笔记(三)
2019-03-11
go--microSocket服务端 php客户端
2019-03-11
如何修改Pspice元件库中元件的模型参数?
2019-03-11
51单片机汇编程序——查表
2019-03-11
小程序提交新数据后如何返回上一页并刷新数据?
2019-03-11
qt c++实现的ai贪吃蛇吃满屏幕,超详细!(二)ai的具体实现
2019-03-11