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

这篇具有很好参考价值的文章主要介绍了Django_自定义文件存储类并将图片上传到FastDFS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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

使用自定义文件存储类

1、定义存储类

2、创建FastDFS的配置文件

3、修改settings.py配置

4、上传图片进行验证

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

4.2 登录django的admin后台

4.3 上传图片

4.4 查看图片

源码等资料获取方法


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

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

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

使用自定义文件存储类

1、定义存储类

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

创建fdfs_storage.py文件

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

实现如下代码:

from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from dailyfresh import settings


class FastDFSStorage(Storage):
    """FastDFS文件存储类"""

    def __init__(self, client_conf=None, nginx_url=None):
        self.client_conf = client_conf or settings.FDFS_CLIENT_CONF
        self.nginx_url = nginx_url or settings.NGINX_URL

    def _open(self, name, mode='rb'):
        """
        用于打开文件
        :param name: 要打开的文件的名字
        :param mode: 打开文件方式
        :return: None
        """
        # 打开文件时使用的,此时不需要,而文档告诉说明必须实现,所以pass
        pass

    def _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失败")

        # 获取返回的文件id
        file_id = ret_dict.get("Remote file_id")

        # 返回什么内容,最终在image属性对应的表中的字段保存的就是什么内容
        return file_id

    def url(self, name):
        """
        返回name所指文件的绝对URL
        :param name: 文件的id
        :return: 文件的url
        """
        # return 'http://ip:port/' + name
        return self.nginx_url + name

    def exists(self, name):
        """ Django判断文件名是否可用, 必须重写"""
        return False

2、创建FastDFS的配置文件

创建fdfs_client.conf文件

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

 内容如下:

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_name

    def __str__(self):
        return self.name

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

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

4.2 登录django的admin后台

创建django的admin后台管理账号

python manage.py createsuperuser

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

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

4.3 上传图片

点击增加

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

 完善信息后,点击保存

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

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

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

4.4 查看图片

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

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

访问结果 

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试


源码等资料获取方法

Django_自定义文件存储类并将图片上传到FastDFS,Django,django,数据库,程序人生,测试开发,python,后端,软件测试

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

三连之后我会在评论区挨个私信发给你们~文章来源地址https://www.toymoban.com/news/detail-552906.html

到了这里,关于Django_自定义文件存储类并将图片上传到FastDFS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包