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 ...
随机推荐
- hdu1272小希的迷宫(并查集判断回路和是否连通)
传送门 迷宫中不能有回路,还要连通 如果最后集合数是一个那就是连通,否则不联通 要合并的两个顶点在相同集合内,表示出现了回路 输入时注意一下 #include<bits/stdc++.h> ...
- 车架号VIN码识别,合格证,购车发票,房产证,车牌,驾驶证,行驶证,征信报告等等识别 从易鑫、大搜车、淘车网,看汽车金融发展新模式
随着我国汽车保有量和产销量的持续增长,汽车技术的日趋成熟,以及互联网+对汽车行业的不断影响,汽车金融的市场规模逐步扩大,市场主体逐步丰富,汽车金融模式也在不断演进. 2016年左右,美国主要汽车厂商通 ...
- spring-boot2.x Application properties属性配置
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- ubuntu lvm模式进行扩容
ubuntu的16.04 18.04有lvm的功能(安装的时候的选项),能在磁盘空间用完的时候,无缝增加一个磁盘进去.因为linux系统只有一个盘,所以是非常方便,不会有windows加1个磁盘要进行 ...
- gitlab+jenkins持续集成(三)
构建: 需要将jenkins服务器上 jenkins用户的公钥发送给 目标服务器的gs用户,使得在jenkins上能用gs免密登录目标服务器 复制密钥到目标机器上(需要登录到的机器) ssh-co ...
- codeforces 1133E K Balanced Teams
题目链接:http://codeforces.com/contest/1133/problem/E 题目大意: 在n个人中找到k个队伍.每个队伍必须满足最大值减最小值不超过5.求满足条件k个队伍人数的 ...
- Go文件右键编译
辛辛苦苦写好了.go文件 发现编译还得敲命令才行,或许配置一个好用点的IDE环境可以解决 但是有时候实在不想开IDE 于是在右键添加了一个编译功能 首先保证go相关的环境变量配置正确 Windows ...
- 时间戳使用的bug,你见过么
博主本人前几天给公司项目里写了个禁言和解除禁言的功能,项目中涉及到对时间的处理,因为学得时候也没很注意,就按自己的思路去写了,运行起来发现了一个天大的bug,就是写的延后一年尽然,刚开始就执行了,而且 ...
- 44 道 JavaScript 难题(JavaScript Puzzlers!)
JavaScript Puzzlers原文 1. ["1", "2", "3"].map(parseInt) 答案:[1, NaN, NaN ...
- ORM PHP 学习记录
ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射.为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却 ...