自定义文件存储类

1.先弄清楚django中默认的上传文件存储FileSystemStorage类
https://docs.djangoproject.com/zh-hans/2.2/ref/files/storage/#django.core.files.storage.FileSystemStorage
2.编写一个自定义存储系统
https://docs.djangoproject.com/zh-hans/2.2/howto/custom-file-storage/

django上自定义存储 类过程

  • 1.在utils/fdfs/创建一个storage.py文件
  • 2.编写内容
# 自定义文件存储类
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client class FDFSStorage(Storage):
def __init__(self, client_conf=None, base_url=None):
"""初始化传参"""
if client_conf is None:
client_conf = './utils/fdfs/client.conf'
self.client_conf = client_conf if base_url is None:
base_url = 'http://172.16.176.3:8888/'
self.base_url = base_url """fast dfs文件存储类"""
def _open(self, name, mode='rb'):
"""打开文件时 使用"""
pass def _save(self, name, content):
"""
保存文件时使用
:param name: 你选择的上传文件名字
:param content: 包含你上传文件内容的File对象
:return: 返回字典格式
"""
# 创建一个fdfs_client对象
client = Fdfs_client(self.client_conf) # 上传文件到fast dfs系统中
res = client.upload_by_buffer(content.read())
"""
{
'Group name' : group_name,
'Remote file_id' : remote_file_id,
'Status' : 'Upload successed.',
'Local file name' : '',
'Uploaded size' : upload_size,
'Storage IP' : storage_ip
}
"""
if res.get('Status') != 'Upload successed.':
# 上传失败
raise Exception('上传文件到fastdfs失败')
# 获取返回的文件ID
file_name = res.get('Remote file_id') return file_name def exists(self, name):
"""django判断文件名是否可用
因为django这边无法判断文件名,所以我们直接返回False
"""
return False def url(self, name):
"""返回访问文件url路径"""
return self.base_url + name
  • 3.将client.conf文件存放到utils/fdfs/目录下并修改内容
# 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/mac/Desktop #修改为你本地mac上可以存放日志的路径 # tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=172.16.176.3:22122 #修改为你ubuntu虚拟机中ip地址 #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

在settings.py文件中指定使用我们自定义的 文件 存储类

# 指定使用我们自定义的上传文件存储类
DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'

使用admin后台管理 测试一下

# 1.找到有图片上传的模型类,然后在admin注册下
from django.contrib import admin
from .models import GoodsType
admin.site.register(GoodsType) # 2.创建超级 用户
python manage.py cratesuperuser # 3.上传中出现的问题解决方法
#报错No module named mutagen
pip install mutagen
#报错 No module named 'mutagen._compat'
进入到/Users/mac/.virtualenvs/django_2.2/lib/python3.8/site-packages/fdfs_client/utils.py
修改导包路径 from mutagen._senf._compat import StringIO
# 报错报错 No module named requests
pip install requests # 4.成功上传后的显示内容 如下图

django项目中使用nginx+fastdfs上传图片和使用图片的流程的更多相关文章

  1. (转) 解决django项目部署到nginx+uwsgi服务器后 admin页面样式消失的问题

    原贴地址:https://blog.csdn.net/qq_42571805/article/details/80862455 摘要 uwsgi为主要服务器,nginx为反向代理服务器部署完成之后发现 ...

  2. [翻译]在Django项目中添加谷歌统计(Google Analytics)

    原文:<Google Analytics tracking code into Django projects, the easy way> 对我来说,制作一个可扩展的Django应用随时 ...

  3. Django项目中使用Redis

    Django项目中使用Redis DjangoRedis 1 redis Redis 是一个 key-value 存储系统,常用于缓存的存储.django-redis 基于 BSD 许可, 是一个使 ...

  4. 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!

    擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...

  5. django 项目中使用多数据库 multiple databases

    假如在一个django项目中使用到了不只一个数据库, 其实这在大一点的工程中很常见,比如主从库 那么会涉及到如下一些东西 1, 定义 在settings中的DATABASE中定义会使用到的数据,比如除 ...

  6. django 项目中的 favicon.ico 处理

    django 项目中的 favicon.ico 处理  (django == 2.0.6) 1. 引入模块: from django.views.generic.base import Redirec ...

  7. Django项目中模板标签及模板的继承与引用【网站中快速布置广告】

    Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环 ...

  8. Django项目中"expected str, bytes or os.PathLike object, not list"错误解决:

    对于这个错误,也在于自己对django基础的掌握不是很牢固,忽略了MEDIA_ROOT的类型是string,而不是list. 错误的写法: MEDIA_ROOT = [ os.path.join(BA ...

  9. django项目中遇到要实现定时任务

    django项目中遇到要实现定时任务,所以选用了简单易用的django-crontab插件. 1.安装 django-crontab pip install django-crontab 2.定时要执 ...

  10. 【技术博客】JWT的认证机制Django项目中应用

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...

随机推荐

  1. [转帖]将 Cloudflare 连接到互联网的代理——Pingora 的构建方式

    https://zhuanlan.zhihu.com/p/575228941 简介 今天,我们很高兴有机会在此介绍 Pingora,这是我们使用 Rust 在内部构建的新 HTTP 代理,它每天处理超 ...

  2. [转帖]linux系统目录结构介绍

    linux的目录结构 Linux系统各个目录的作用 /: 根目录.有且只有一个根目录.所有的东西都是从根目录开始.举个例子:当你在终端里输入"/home",你其实是在告诉服务器,先 ...

  3. [转帖]011 Linux 打包与解压 tar

    https://my.oschina.net/u/3113381/blog/5429977 01 压缩.打包命令有哪些? Linux 上有着各种压缩.打包的工具:tar.gzip.zip.7z,而 t ...

  4. [转帖]Systemd 指令

    一.由来 历史上,Linux 的启动一直采用init进程. 下面的命令用来启动服务. $ sudo /etc/init.d/apache2 start # 或者 $ service apache2 s ...

  5. 小程序跳转到h5页面无法获取参数

    在小程序中,遇见这样一个需求: 小程序(携带token)跳转到H5页面: 在H5端取token;将token作为参数: 然后返回来的信息, 这里遇见一个问题,在created中无法获取地址栏的参数: ...

  6. Flask四剑客

    目录 Flask四剑客 Flask四剑客 ''' 响应字符串 响应html页面 跳转页面 返回json字符串 ''' from flask import Flask, render_template, ...

  7. Dubbo3应用开发—Dubbo注册中心引言

    Dubbo注册中心引言 什么是Dubbo注册中心 Dubbo的注册中心,是Dubbo服务治理的⼀个重要的概念,他主要用于 RPC服务集群实例的管理. 注册中心的运行流程 使用注册中心的好处 可以有效的 ...

  8. 手撕Vue-提取元素到内存

    接着上一篇文章,我们已经实现了构建Vue实例的过程,接下来我们要实现的是提取元素到内存. 主要是通过文档碎片来实现,文档碎片是一个轻量级的文档,可以包含和控制节点,但是不会像真实的DOM那样占用内存, ...

  9. SpringBoot实现动态数据源配置

    场景描述: 前一阵子接手的新项目中需要使用2个数据源. 一个叫行云数据库,一个叫OceanBase数据库. 就是说,我有时候查询要查行云的数据,有时候查询要查 OceanBase 的数据,咋办? 废话 ...

  10. 多智能体强化学习算法【二】【MADDPG、QMIX、MAPPO】

    相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...