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 ...
随机推荐
- mysql 中sql语句关键字的书写顺序与执行顺序
书写顺序: select -> from -> where -> group by -> having -> order by 执行顺序: from -> wher ...
- zabbix4.0LTS安装配置
一.环境准备 1.最小化安装centos7.5系统 2.安装常用软件包 yum install -y net-tools vim bash-completion 3.关闭selinux和修改主机名 v ...
- DMA-Direct Memory Access
什么是? DMA 首先它是一种数据的传输方式:其次传输包括从设备到内存.内存到存储.内存到内存等:最后,它是在不经过cpu的情况下实现数据传输.. DAM主要有共享缓存DMA,Scatter/Gath ...
- python 基础篇01
一.python介绍年的圣诞节期间,吉多亿个文件的上传和下载千万张照片被分享,全部用倍年,为了打发圣诞节假期,年,第一个Python编译器诞生.它是用C语言实现的,并能够调用C语言的库文件.从一出生, ...
- Datawhale MySQL 训练营 Task5
数据导入导出 导入table http://www.runoob.com/mysql/mysql-database-import.html 导出table http://www.runoob.com/ ...
- swap分区和内存
1 查看swap 空间大小(总计): # free -m 默认单位为k, -m 单位为M total used fr ...
- python的多路复用实现聊天群
在我的<python高级编程和异步io编程>中我讲解了socket编程,这里贴一段用socket实现聊天室的功能的源码,因为最近工作比较忙,后期我会将这里的代码细节分析出来,目前先把代码贴 ...
- python下graphviz安装
参考链接:https://blog.csdn.net/u013250416/article/details/72790754 1.安装Graphviz 在graphviz的官网(网址:http://w ...
- java判断字符串编码
是 public static String getEncoding(String str){ String encoding = "UTF-8"; try { if (str.e ...
- 《Spring1之第六次站立会议》
<第六次站立会议> 昨天:向小伙伴们请教了我代码的错误的解决方法以及对TCP/IP协议进行了相关的了解. 今天:我把自己项目工程里的服务器端界面进行了优化和完善. 遇到的问题:觉得做的界面 ...