Django对接FastDFS 上传图片

文章介绍了如何在Djangoweb框架中集成FastDFS分布式文件系统来存储静态资源。首先配置FastDFS的clint.conf文件,然后在Django项目的settings中设置存储引擎和相关配置,重写Django的Storage函数以实现文件上传至FastDFS。当上传图片时,数据库会保存FastDFS上的文件地址,可以直接通过浏览器访问。
摘要由CSDN通过智能技术生成

Django对接FastDFS

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务

web框架为Django,我选择将静态资源存放在fastdfs上面

1.我们先在web服务主文件夹下面创建一个fastdfs文件夹,再在里面创建一个配置文件:clint.conf
#配置文件内容如下
connect_timeout=30
network_timeout=60
base_path=/home/FastDFS/fd_storage/data   #指定服务器存放的地址
tracker_server=12.34.567.897:22122        #服务器IP地址  端口为22122
log_level=info
use_connection_pool = false
connection_pool_max_idle_time = 3600
load_fdfs_parameters_from_tracker=false
use_storage_id = false
storage_ids_filename = storage_ids.conf
http.tracker_server_port=80      #默认80端口
2.在web项目的settings下面添加配置
#重写DJango引擎文件,
DEFAULT_FILE_STORAGE = 'Web_API.views.FastDFSStorage'  #在视图层重写的底层函数

# 上传之后的访问链接  80端口可以不写  个人的fastdfs是什么端口就写什么端口
FDAS_URL = 'http://12.34.567.897/' 

#fdfs的指明路径,fdfs的配置文件
FDFS_CLIENT_CONF = (
    os.path.join(BASE_DIR, 'fastdfs/clint.conf'),
)
CKEDITOR_UPLOAD_PATH = '' # 上传图片保存路径,使用了fastDFS上传,设置为''
3.重写DJango底层storage函数(storage是ImageField底层上传静态文件的函数)
from django.conf import settings
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client

class FastDFSStorage(Storage):    #重写Djnago底层storage
    """定义FastDFS客户端类"""
    def __init__(self, base_url=None, client_conf=None):
        """
        初始化对象
        :param base_url:
        :param client_conf:
        """
        self.base_url = settings.FDAS_URL
            # 'http://12.34.567.897/
        self.client_conf = settings.FDFS_CLIENT_CONF
            # FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'fastdfs/clint.conf')

    def _open(self, name, mode = 'rb'):
        """
        打开文件
        :param name:
        :param mode:
        :return:
        """
        pass

    def _save(self, name, content):
        """
        保存文件
        :param name: 传入文件名
        :param content: 文件内容
        :return:保存到数据库中的FastDFSDE文件名
        """
        #链接对象
        client = Fdfs_client(self.client_conf)
        #上传文件通过文件内容
        ret = client.upload_by_buffer(content.read())
        if ret.get("Status") != "Upload successed.":
            raise Exception("upload file failed")
        file_name = ret.get("Remote file_id")
        #将文件返回fastdfs
        return file_name
    
    def exists(self, name):
        """
        检查文件是否重复, FastDFS自动区分重复文件
        :param name:
        :return:
        """
        #不重复
        return False
    
    def url(self, name):
        """
        获取name文件的完整url
        :param name:
        :return:
        """
        return self.base_url + name
再次通过ImageField上传图片,我们发现数据库中保存的是文件的地址映射,通过浏览器访问地址我们可以直接访问到fastdfs的图片

注意:fastdfs能上传图片的前提是必须要在服务器上先部署好且能运行,不然是没办法上传的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芦苇浮绿水

觉得还不错请博主喝杯饮料

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值