Django + FastDFS (分布式远程服务器存储文件)
时间:2019-08-18
本文章向大家介绍Django + FastDFS (分布式远程服务器存储文件),主要包括Django + FastDFS (分布式远程服务器存储文件)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
之前随便过一篇Docker来搭建分布式文件系统FastDfs就跳过了
https://www.cnblogs.com/xcsg/p/10901461.html
FastDFS的Python (django客户端)
1.安装依赖
#安装库 pip install py3Fdfs pip install mutagen pip isntall requests
2.配置settings.py
# 激活重写存储文件引擎方法 DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage' # 图片存阿里云的地址 FDAS_URL = 'http://39.97.117.229:8888/' # 存进阿里云服务器里因为没有后缀(jpg/png),图片连接要放进 img 标签里才能显示 # <img src="http://39.106.64.101:8888/group1/M00/00/00/rBHmx10A9JmAVEKNAABf71XWOL06003319" alt=""># 配置 Fastdfs 配置文件 FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'client.conf')
3.配置client.conf 文件
connect_timeout=30 network_timeout=60 tracker_server=39.97.117.229: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
4.封装上传文件 fastdfs.py
from django.core.files.storage import Storage from fdfs_client.client import Fdfs_client,get_tracker_conf from video_back.settings import FDAS_URL,FDFS_CLIENT_CONF # 重写存储引擎方法 class FastDfsStroage(Storage): def __init__(self, base_url = None, client_conf = None): """ 初始化对象 :param base_url: :param client_conf: """ if base_url is None: base_url = FDAS_URL # 'http://39.106.64.101:8888/' self.base_url = base_url if client_conf is None: client_conf = FDFS_CLIENT_CONF # FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'client.conf') self.client_conf = client_conf def _open(self, name, mode = 'rb'): """ 打开文件 :param name: :param mode: :return: """ pass def _save(self,content): """ 保存文件 :param name: 传入文件名 :param content: 文件内容 :return:保存到数据库中的FastDFSDE文件名 """ client = Fdfs_client(get_tracker_conf(FDFS_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") #byte转str file_name = str(file_name,encoding = "utf-8") 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
5.上传逻辑views.py
#导入封装类 from .fastdfs import * from django.http import JsonResponse def upload(request): img = request.FILES.get('file') img_fast = FastDfsStroage() #存入远程服务器 ret = img_fast._save(img) #返回存入图片的url url = img_fast.url(ret) if url: return JsonResponse({'url':url})
效果如下:
原文地址:https://www.cnblogs.com/xcsg/p/11371091.html
- C#读取“我的文档”等特殊系统路径及环境变量
- winform CheckedListBox实现全选/全不选
- 机器学习该如何入门
- dedecms建的网站如何去掉/index.html
- WPF ContextMenu的使用
- Json的序列化与反序列化以及乱入的k_BackingField
- 亚马逊面试题
- VisualStudio 怎么使用Visual Leak Detector
- Cannot find module 'socket.io'
- 【学术】独热编码如何在Python中排列数据?
- 比特币的私钥【区块链生存训练】
- Unity3D学习笔记第一课
- Extjs4处理后台json数据中日期和时间的方法
- 机器学习:Python测试线性可分性的方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java——继承性(继承的作用、实现、限制)
- JavaWeb——JSON语法讲解与Jackson解析器完成JSON数据与Java对象的转换(应用Ajax与JSON实现校验用户名是否在的功能)
- JavaWeb——JQuery之高级案例实战(打开网页自动弹出广告效果、抽奖效果实现)
- JavaWeb——JQuery之高级操作应用及实践案例总结(动画、遍历、事件绑定)
- Java——简单Java类深入(数据表与简单Java类、一对多映射、双向一对多映射、多对多映射)
- Java——代码块(普通块、构造块、静态块)
- JavaWeb——JQuery之五种选择器的应用及实践案例总结(基本选择器、层级选择器、属性选择器、过滤选择器、表单过滤选择器)
- Java——引用传递实例分析(进阶分析、对象比较、类与类的关联实现)
- JavaWeb——JQuery之基本概述与快速入门实践总结(JQuery各版本区别、JQuery对象和JS对象的区别与转换)
- Java——动态代理设计模型概述(实现步骤、增强方式)与代理商采购电脑模拟程序实战
- Java——this关键字(调用本类属性、调用本类方法、表示当前对象)
- 5分钟玩转Lighthouse|零基础也能拥有WordPress个人博客
- Java——String类常用方法总结,看这一篇就够啦(比较、查找、截取、替换、拆分、其他)
- Java——深入分析类与对象(封装性、构造方法与匿名对象、简单Java类开发原则)
- Java——类与对象(基本概念、定义、内存分析、引用传递)