• Django中使用fastDFS


    http://www.mamicode.com/info-detail-2468256.html

    安装与配置

      请自行百度

      启动tracker和storage

        sudo service fdfs_trackerd start

        sudo service fdfs_storaged start

      上传文件

        fdfs_upload_file /etc/fdfs/client.conf  +(要上传的文件路径)

      配合nginx使用时 

        启动nginx

        sudo /usr/local/nginx/sbin/nginx

        关闭

        sudo /usr/local/nginx/sbin/nginx -s stop

    在Python中使用fastDFS

    1. 下载fdfs_client-py-master.zip

      下载地址:https://github.com/jefforeilly/fdfs_client-py

    2. 安装:在中单切换到zip所在的文件夹下,

      pip install fdfs_client-py-master.zip

      如果报错请参考:https://blog.csdn.net/weixin_30583563/article/details/97461165

     3. 使用时nginx无法正常工作请参考

    https://blog.csdn.net/u013255206/article/details/78248612?utm_source=blogxgwz8

    https://www.cnblogs.com/bkylkh/p/10876498.html

    默认上传文件类是FileSystemStorage类,上传路径为Media_root。可以通过继承FileSystemFile的父类Storage来重写其方法,从而扩展成我们想要的类。

    在新建的项目路径下的文件夹utils中创建一个fdfs包,在里面创建py文件,storage.py

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


    class FDFSStorage(Storage):
    '''fastdfs文件存储类'''

    def _open(self, name, mode='rb'):
    '''打开文件时使用'''
    pass

    def _save(self, name, content):
    '''保存文件时使用'''
    # name:你选择上传的文件的名字
    # content:包含你上传文件内容的File对象

    # 创建一个Fdfs_client对象,该对象是用来将文件上传到fastdfs的类,需要为其指定一个配置文件
    # 配置文件client.conf是复制过来的,注意修改里面的base_path和tracker_server
    client = Fdfs_client('./utils/fdfs/client.conf')

    # 上传文件 到fastdfs系统中
    # upload_by_file上传指定文件
    res = client.upload_by_buffer(content.read()) # 根据内容上传文件,因为content是file对象,所以用这个方法

    # 上传成功的返回结果如下
    "{‘Group name‘: ‘group1‘, "
    "‘Remote file_id‘: ‘group1/M00/00/02/CtM3BVr-k6SACjAIAAJctR1ennA809.png‘, "
    "‘Status‘: ‘Upload successed.‘, "
    "‘Local file name‘: ‘/Users/delron/Desktop/1.png‘, "
    "‘Uploaded size‘: ‘151.00KB‘, ‘Storage IP‘: ‘10.211.55.5‘}"

    if res.get('Status') != 'Upload successed.':
    # 上传失败
    raise Exception('上床文件失败')
    filename = res.get('Remote file_id')

    # 返回存储在fastdfs的文件名
    return filename

    def exists(self, name):
    '''Django判断文件名是否可用'''
    # 因为文件名是存储在fastDFS中的,所以在Django中不存在是否可用的问题,直接返回False即可
    return False

    def url(self, name):
    # name是save方法返回的filename
    # name加上nginx服务器地址,就可以构造出一个完整的图片url
    return 'http://192.168.2.227:8888' + name

    settings.py中要配置:
    DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage' # 自己定义的类的位置

    优化上述代码
    storage.py
    from django.core.files.storage import Storage
    from fdfs_client.client import Fdfs_client
    from Dailyfresh.settings import FDFS_CLIENT_CONF, BASE_URL


    class FDFSStorage(Storage):
    '''fastdfs文件存储类'''
    def __init__(self, client_conf=FDFS_CLIENT_CONF, base_url=BASE_URL):
    self.client_conf = client_conf
    self.base_url = base_url

    def _open(self, name, mode='rb'):
    '''打开文件时使用'''
    pass

    def _save(self, name, content):
    '''保存文件时使用'''
    # name:你选择上传的文件的名字
    # content:包含你上传文件内容的File对象

    # 创建一个Fdfs_client对象,该对象是用来将文件上传到fastdfs的类,需要为其指定一个配置文件
    # 配置文件client.conf是复制过来的,注意修改里面的base_path和tracker_server
    client = Fdfs_client(self.client_conf)

    # 上传文件 到fastdfs系统中
    # upload_by_file上传指定文件
    res = client.upload_by_buffer(content.read()) # 根据内容上传文件,因为content是file对象,所以用这个方法

    # 上传成功的返回结果如下
    "{‘Group name‘: ‘group1‘, "
    "‘Remote file_id‘: ‘group1/M00/00/02/CtM3BVr-k6SACjAIAAJctR1ennA809.png‘, "
    "‘Status‘: ‘Upload successed.‘, "
    "‘Local file name‘: ‘/Users/delron/Desktop/1.png‘, "
    "‘Uploaded size‘: ‘151.00KB‘, ‘Storage IP‘: ‘10.211.55.5‘}"

    if res.get('Status') != 'Upload successed.':
    # 上传失败
    raise Exception('上床文件失败')
    filename = res.get('Remote file_id')

    # 返回存储在fastdfs的文件名
    return filename

    def exists(self, name):
    '''Django判断文件名是否可用'''
    # 因为文件名是存储在fastDFS中的,所以在Django中不存在是否可用的问题,直接返回False即可
    return False

    def url(self, name):
    # name是save方法返回的filename
    # name加上nginx服务器地址,就可以构造出一个完整的图片url
    return self.base_url + name

    settings.py
    # 配置Django存储类
    DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage'


    # 配置client_conf的文件路径,在storage.py中使用
    FDFS_CLIENT_CONF = './utils/fdfs/client.conf'
    # 配置nginx的ip和端口号,在storage.py中使用
    BASE_URL = 'http://192.168.2.227:8888/'
    
    
  • 相关阅读:
    检查IP地址是否有效(delphi)
    Oracle 常用操作
    DBGrid中顯示行號的終極解決方案(Delphi篇)
    从零开始学Java 第24章 网络聊天室
    JavaScript的循环结构和经典题目
    html5/css3布局(一)
    html常用的基本标签
    HTML5——css基础语法
    JavaScript函数使用和DOM节点
    C语言Ⅰ|博客作业07
  • 原文地址:https://www.cnblogs.com/JackShi/p/12769982.html
Copyright © 2020-2023  润新知