django中使用FastDFS分布式文件系统接口代码实现文件上传、下载、更新、删除
运维使用docker部署好之后FastDFS分布式文件系统之后,提供给我接口如下:
fastdfs tracker 192.168.1.216 192.168.1.217 storage 192.168.1.216 192.168.1.217
我们只需要在配置文件中进行配置即可,然后利用客户端提供的接口通过简单的代码就可以将文件上传到分布式文件系统中
至于内部实现机制,可以参考我的另外一篇博客:分布式文件系统Fastdfs原理及部署
再次提醒在安装客户端可能会遇到各种不可控的因素,导致你上传失败,在windows中在进行安装客户端fdfs_client模块或在linux安装fdsff_client模块之后,在使用接口时都可能会出现问题,小伙伴们可以在使用时自行踩坑,我只介绍我踩坑之后最终的实现方法,即可绕过踩坑,介绍流程包括fastdfs客户端的安装、配置、django中调用相应的接口
一、客户端Fastdfs客户端的安装
因客户端模块在自行安装会出现问题,所以我提供该客户端的模块,下载链接:fast_client模块
进入fdfs_client-py-master.zip所在目录
pip install fdfs_client-py-master.zip pip install mutagen pip install requests
配置文件在django项目中的存放位置:

配置文件client.conf中的内容个如下,需要做修改的部分已用红色进行标注:
# connect timeout in seconds
# default value is 30s
connect_timeout=30 # network timeout in seconds
# default value is 30s
network_timeout=60 # the base path to store log files
#客户端存放日志目录,可自行设置
base_path=/Users/delron/Desktop # tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
#改成自己的ip即可,配置一个即可tracker会自行帮助我们进行任务调度
tracker_server=192.168.1.217:22122 #standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info # if use connection pool
# default value is false
# since V4.05
use_connection_pool = false # connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600 # if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false # if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false # specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf #HTTP settings
http.tracker_server_port=80 #use "#include" directive to include HTTP other settiongs
##include http.conf
二、在djaogo中使用fastdf接口实现增、删、改,下载
自定义文件,以下仅供参考:

以下是实现分布式文件系统实现文件的上传、修改、删除的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/4/26 10:09
# @Author : suihongliang
# @Site :
# @File : fastdfs_service.py
# @Software: PyCharm
"""
使用fastdfs分布式文件存储系统实现文件的上传、下载、删除
"""
from django.conf import settings
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
from fdfs_client.client import Fdfs_client
from utils.logger_utils import get_logging logger = get_logging(__name__) @deconstructible
class FastDFSStorage(Storage):
def __init__(self, client_conf=None):
"""
初始化
:param client_conf: FastDFS客户端配置文件的路径
"""
if client_conf is None:
client_conf = settings.FDFS_CLIENT_CONF
self.client_conf = client_conf # def upload(self, content):
# """
# 在FastDFS中保存文件
# :param content: 通过
# :return: 保存到数据库中的FastDFS的文件名
# """
# 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")
# return file_name def upload(self, local_path):
"""
将文件上传到fastdfs分布式文件系统中
:param local_path: 上传文件的本地路径
:return:
"""
client = Fdfs_client(self.client_conf)
ret = client.upload_by_file(local_path)
logger.info(ret)
print(ret)
if ret.get("Status") != "Upload successed.":
raise Exception("upload file failed")
remote_file_id = ret.get("Remote file_id")
logger.info("存储在fastdfs上的文件路径:", remote_file_id) return True, remote_file_id def update(self, local_path, remote_file_id):
"""
对修改后的文件进行更新
:param local_path:
:param remote_file_id:
@return: dictionary {
'Status' : 'Modify successed.',
'Storage IP' : storage_ip
}
"""
client = Fdfs_client(self.client_conf)
try:
local_path=bytes(local_path.encode("utf-8"))
remote_file_id=bytes(remote_file_id.encode("utf-8"))
ret_update = client.modify_by_file(local_path, remote_file_id)
logger.info("文件更新成功",ret_update)
return True, ret_update
except Exception as e:
logger.warning(u'文件更新失败,错误信息:%s' % repr(e))
return None, "文件更新失败" def download(self, local_path, remote_file_id):
"""
从fastdfs分布式文件系统进行下载文件
:param local_path: 本地保存文件路径
:param remote_file_id: 上传到fastdfs文件系统中自动生成的文件路径即文件id
@return dict {
'Remote file_id' : remote_file_id,
'Content' : local_filename,
'Download size' : downloaded_size,
'Storage IP' : storage_ip
}
"""
client = Fdfs_client(self.client_conf)
try:
ret_download = client.download_to_file(local_path, remote_file_id)
return True, ret_download except Exception as e:
logger.warning(u'文件下载失败,错误信息:%s' % repr(e))
return None, "文件下载失败" def delete(self, remote_file_id):
"""
从fastdfs分布式文件系统中将文件删除
:param remote_file_id: 上传到fastdfs文件系统中自动生成的文件路径即文件id
@return tuple ('Delete file successed.', remote_file_id, storage_ip)
"""
client = Fdfs_client(self.client_conf)
try:
ret_delete = client.delete_file(remote_file_id)
return ret_delete except Exception as e:
logger.warning(u'文件删除失败,错误信息:%s' % repr(e))
return None
在django创建的settings中需要做的配置信息如下:

可以根据自己代码实现进行相应的配置:
# fastdf配置文件设置
#
DEFAULT_FILE_STORAGE = 'distributedstorage.utils.fastdfs.fdfs_storage.FastDFSStorage' # FastDFS
# fastdfs tracker 192.168.1.212 192.168.1.213 storage 192.168.1.212 192.168.1.213
# FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf')
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'client.conf')
在调用接口时,传递相应的参数即可完成文件的上传、下载、删除和更新,成功使用客户端进行文件的增、删、改和下载后返回文件的参数见上述代码。
原创不易,转载需说明,希望对你有所帮助!
django中使用FastDFS分布式文件系统接口代码实现文件上传、下载、更新、删除的更多相关文章
- Java 客户端操作 FastDFS 实现文件上传下载替换删除
FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK.这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK 至 Maven 中央仓库,目前中央仓库最新版仍旧是 1.2 ...
- SpringMVC中使用 MultipartFile 进行文件上传下载及删除
一:引入必要的包 <!--文件上传--> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fil ...
- java中的文件上传下载
java中文件上传下载原理 学习内容 文件上传下载原理 底层代码实现文件上传下载 SmartUpload组件 Struts2实现文件上传下载 富文本编辑器文件上传下载 扩展及延伸 学习本门课程需要掌握 ...
- Django文件上传下载与富文本编辑框
django文件上传下载 上传 配置settings.py # 设定文件的访问路径,如:访问http://127.0.0.1:8000/media/就可以获取文件 MEDIA_URL = '/medi ...
- 一、手把手教你docker搭建fastDFS文件上传下载服务器
在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...
- FastDFS实现文件上传下载实战
正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...
- Java中实现文件上传下载的三种解决方案
第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...
- django 12天(跨域,文件上传,下载,cookie,session)
django 12天(跨域,文件上传,下载) 跨域 什么是跨域 1.协议不同 2.端口不同 3.主机不同 如何解决跨域 1.安装django-cors-headers模块 2.在settings.py ...
- Python接口自动化——文件上传/下载接口
〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...
随机推荐
- h5 和之前版本的区别
html5和之前版本的区别就是:以前版本多采用<tr><td>等标签,对于webapp的开发不是很好把控.H5采用<div>等标签直接进行布局(且多了许多标签功能很 ...
- vs2012 与 win7 不兼容的问题
Visual Studio 2012 与此版本的 Windows 不兼容 突然出现的,如下图: 这个是网上找的图,我的没来得及截图就修复了,基本一致,只是我的是win7 64位系统,所以安装位置那里是 ...
- Spring集成Kafka-注解,xml配置2种方式实现
准备工作: 1.安装kafka+zookeeper环境 2.利用命令创建好topic 参考官网 http://kafka.apache.org/documentation/ 一XML配置文件方式实现
- Ubuntu下载磁力链接,torrent,迅雷链接
用ubuntu下载电影:磁力链接,torrent,迅雷链接 需要软件:Ktorent, Amule 安装软件: sudo apt-get install ktorrent sudo apt-get i ...
- RHEL7 利用双网卡绑定实现VLAN
使用nmcli创建bond配置 #nmcli connection add type bond ifname bond0 con-name bond0 mode active-backup #nmcl ...
- nmap命令详解
基础命令学习目录 原文链接:http://www.cnblogs.com/hongfei/p/3801357.html Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具. ...
- Tomcat提高并发
Centos7环境下Tomcat 启动慢的解决方案1.增加熵值(本质增加random)安装软件 >> Yum –y install rng-tools 启动熵服务 >> Sys ...
- Java 面试-- 1
JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了 ...
- 关于datatable的数据绑定问题
最近做项目掉在数据绑定这个小坑里了,最后发现问题其实很简单,只是官方的文档描述可能不太清除导致的吧.首先贴上官网地址:http://www.datatables.club/ 关于这个插件的简单使用就不 ...
- Git的基本使用方法和安装&心得体会(使用git命令行)
这是补发的,使用命令行操作的. (1)选择本地repository的路径 找到后点鼠标右键,选择git bash here. (2) clone到本地 在命令行输入 git clone ADDRESS ...