Django_自定义文件存储类并将图片上传到FastDFS

目录

将图片到FastDFS和浏览的流程图

使用自定义文件存储类

1、定义存储类

2、创建FastDFS的配置文件

3、修改settings.py配置

4、上传图片进行验证

4.1 定义一个包含ImageField字段的模型类

4.2 登录django的admin后台

4.3 上传图片

4.4 查看图片

源码等资料获取方法


先部署好FastDFS,这个以前我的文章有讲过,可以去找找看

将图片到FastDFS和浏览的流程图

使用自定义文件存储类

1、定义存储类

自定义django文件存储类需要继承django的Storage类,并重写_open、_save、url、exists方法

创建fdfs_storage.py文件

实现如下代码:

from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from dailyfresh import settingsclass FastDFSStorage(Storage):"""FastDFS文件存储类"""def __init__(self, client_conf=None, nginx_url=None):self.client_conf = client_conf or settings.FDFS_CLIENT_CONFself.nginx_url = nginx_url or settings.NGINX_URLdef _open(self, name, mode='rb'):"""用于打开文件:param name: 要打开的文件的名字:param mode: 打开文件方式:return: None"""# 打开文件时使用的,此时不需要,而文档告诉说明必须实现,所以passpassdef _save(self, name, content):"""用于保存文件:param name: 要保存的文件名字:param content: 要保存的文件的内容:return: None"""# 创建一个Fdfs_client对象, 需要client配置文件client = Fdfs_client(self.client_conf)# 上传文件到fastdfs系统中ret_dict = client.upload_by_buffer(content.read())# ret_dict返回的是一个字典,类型如下"""{'Group name': 'group1','Local file name': '02.png','Remote file_id': 'group1/M00/00/00/wKgNgF9uzVuAd7JlAAS-_JN9ZAI299.png','Status': 'Upload successed.','Storage IP': '192.168.13.128','Uploaded size': '303.00KB'}"""if ret_dict.get("Status") != "Upload successed.":# 上传失败raise Exception("上传文件到fastdfs失败")# 获取返回的文件idfile_id = ret_dict.get("Remote file_id")# 返回什么内容,最终在image属性对应的表中的字段保存的就是什么内容return file_iddef url(self, name):"""返回name所指文件的绝对URL:param name: 文件的id:return: 文件的url"""# return 'http://ip:port/' + namereturn self.nginx_url + namedef exists(self, name):""" Django判断文件名是否可用, 必须重写"""return False

2、创建FastDFS的配置文件

创建fdfs_client.conf文件

 内容如下:

connect_timeout=30
network_timeout=60
tracker_server=192.168.107.201:22122
http.tracker_server_port=8080

3、修改settings.py配置

在setting.py文件中添加如下配置

# 设置Django的文件存储类
DEFAULT_FILE_STORAGE = 'utils.fdfs_storage.FastDFSStorage'# FastDFS配置文件路径
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, "./dailyfresh/fdfs_client.conf")# 设置fdfs存储服务器上nginx的IP和端口号
NGINX_URL = 'http://192.168.107.201:8080/'

4、上传图片进行验证

4.1 定义一个包含ImageField字段的模型类

class GoodsType(BaseModel):'''商品类型模型类'''name = models.CharField(max_length=20, verbose_name='种类名称')logo = models.CharField(max_length=20, verbose_name='标识')image = models.ImageField(upload_to='type', verbose_name='商品类型图片')class Meta:db_table = 'df_goods_type'  # 数据库表格名称verbose_name = '商品种类'verbose_name_plural = verbose_namedef __str__(self):return self.name

在该模型类所属应用的admin.py中注册该模型类

4.2 登录django的admin后台

创建django的admin后台管理账号

python manage.py createsuperuser

在浏览器中输入 127.0.0.1/admin,输入上面创建的账号和密码进入admin管理后台

4.3 上传图片

点击增加

 完善信息后,点击保存

 保存成功后,进入详情界面,可以看到上传图片在FastDFS中保存的id

4.4 查看图片

不能使用“nginx地址+图片id”直接查看图片,需要在html静态页面引用查看

访问结果 


源码等资料获取方法

 各位想获取源码的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20315.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在WordPress网站中嵌入TikTok视频(3个简单方法)

您想轻松地将 TikTok 视频嵌入您的 WordPress 网站吗? 如果您已经创建了成功的、病毒式传播的 TikTok,那么将这些视频发布到您的网站也是有意义的。通过这种方式,您只需很少的额外努力就能获得更多的观看次数、参与度和社交媒体关注者。 在…

k8s 的命名空间一直 Terminating

查看命名空间状态,[NAMESPACE] 处于 Terminating kubectl get ns使用强制删除命令没有效果 kubectl delete namespace [namespace] --force --grace-period0 解决办法:删除部署文件 yaml 中的 finalizers 属性 kubectl get namespace [NAMESPACE] -o …

基于LLM大模型开发Web App生成器

随着越来越多的代码生成模型公开可用,现在可以以我们以前无法想象的方式进行文本到网络甚至文本到应用程序。 本教程介绍了一种通过流式传输和渲染内容来生成 AI Web 内容的直接方法。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 1、在 Node 应用程序中…

迅为龙芯3A5000_7A2000COMe_模块和主板

龙芯 3A50007A2000 COME 采用全国产龙芯 3A5000 处理器,基于龙芯自主指令系统 (LoongArche)的 LA464 微结构,并进一步提升频率,降低功耗,优化性能。桥片采用龙芯 7A2000,支持 PCIE 3.0、USB 3.0 和 SATA 3.0、显示接口…

VMware ESXi 7.0 U3n macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS (标准版和厂商定制版) ESXi 7.0 标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-oem/,查看…

【pytest自动化测试框架】从0到1由浅入深详细讲解

一:框架简介 pytest,rf(学关键字语法,报告漂亮),unitest   pytest是python的第三方单元测试框架,可以做系统测试,比unitest更简洁和高效,执行315种以上的插件&#xff…

深度学习(27)——YOLO系列(6)

深度学习(27)——YOLO系列(6) 咱就是说,需要源码请造访:Jane的GitHub:在这里等你哦 嗨,好久不见,昨天结束了yolov7的debug过程,真的在尽力句句理解&#xff…

华为OD机试真题 Java 实现【不开心的小朋友】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 大家好,我是哪吒。 做技术,我是认真的,立志于打造最权威的华为OD机试真题专栏,帮助那些与我有同样需求的人&#xff…

免费系统维护清理工具:Onyx for Mac图文安装教程

OnyX 是一款适用于 macOS 的免费系统维护和优化工具。它由法国开发者 Jol Barrire(也称为 Titanium)创建,旨在帮助 macOS 用户管理和优化其计算机系统。 OnyX 提供了许多功能和工具,可以帮助用户执行各种系统维护任务。它是一个非…

阿里云服务器架构x86、GPU、ARM、裸金属和超级计算集群说明

阿里云服务器架构有什么区别?X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别?阿里云服务器网分享云服务器ECS架构详细说明: 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…

火车头采集器下载中文图片地址报错:发生错误终止..

火车头采集器下载中文图片地址报错:发生错误终止.. 报错信息 该问题时网友发现的,采集的内容中图片URL地址包含中文字符。 然后在采集内容时火车头自动下载图片就提示:发生错误终止,远程服务器返回错误:&#xff08…

vue3的customRef

文章来源:我的博客,欢迎访问,不欢迎攻击,谁攻击谁儿子 customRef 作用:实现一个自定义的ref,并对其依赖项跟踪和更新触发进行显示控制 像是下面的代码一样: <template><div class"lim"><div class"btns"><el-input type"text…