Django Admin 上传文件到七牛云的示例代码


Posted in Python onJune 20, 2020

中文圈关于Django Admin 上传文件到七牛云的资料和函数库已经是2年前的了,国外的则都是关于AWS S3、Azure Storage一些国外的服务的。我根据Django的文档里提到的存储系统来实现上传文件到七牛云的简单功能。

在Django Admin的表单是根据数据模型生成的,其中文件上传由FileField和继承FileField的ImageField来决定的,文件上传到静态文件目录,数据库保存相对路径。实现上传文件到七牛云我们是根据FileField的storage参数来实现的。

models.ImageField(storage=MyStorage())

storage参数需要传入一个实现抽象类Storage的对象。

下面引用文档的原句

你自定义的存储系统必须为Django.core.files.storage.Storage的一个子类:

from django.conf import settings
from django.core.files.storage import Storage

class MyStorage(Storage):
  def __init__(self, option=None):
    if not option:
      option = settings.CUSTOM_STORAGE_OPTIONS
    ...

然后重写全部的抽象方法,具体的可以去官网文档看。我们这里先不继承Storage。我在Django的核心里找到了已经继承了的FileSystemStorage,我想只要继承Django标准的文件管理类

FileSystemStorage,重载_save部分变成上传到七牛云不就好了。说干就干。

class MyStorage(FileSystemStorage):
  def _save(self, name, content):
    # 延续原方法的写法
    filename = name.replace('\\', '/')
    # 将文件传入封装好的对象里
    q = Qiniu()
    q.upload_stream(filename, content.file.getvalue())
    return filename

我简单写一下封装的Qiniu上传的类

class Qiniu():
  def __init__(self):
    self.access_key = settings.QINIU_ACCESS_KEY
    self.secret_key = settings.QINIU_SECRET_KEY
    # 要上传的空间
    self.bucket_name = settings.QINIU_BUCKET_NAME
    # 构建鉴权对象
    self.auth = Auth(self.access_key, self.secret_key)
    
  def get_token(self, key):
    """

    :param key: 文件名
    :return: 上传令牌
    """
    policy = {
      'scope': settings.QINIU_BUCKET_NAME,
      'mimeLimit': 'image/jpeg;image/png',
      'deadline': 3600
    }
    # 3600为token过期时间,秒为单位。3600等于一小时
    token = self.auth.upload_token(self.bucket_name, key, 3600, policy)
    return token
    
  def upload_stream(self, filename, stream_data):
    """

    :param filename: 文件名
    :param stream_data: 二进制数据
    :return: 无
    """
    # 上传后保存的文件名
    key = filename
    # 生成上传 Token,可以指定过期时间等
    token = self.auth.upload_token(self.bucket_name, key, 3600)
    # 要上传文件的本地路径
    # localfile = file_path
    ret, info = put_data(up_token=token, key=key, data=stream_data)
    assert ret['key'] == key
    # assert ret['hash'] == etag_stream(stream_data)

参考资料:

https://docs.djangoproject.co ...

总结

到此这篇关于Django Admin 上传文件到七牛云的文章就介绍到这了,更多相关Django Admin 上传文件到七牛云内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Django框架中编写Context处理器的方法
Jul 20 Python
使用Python脚本生成随机IP的简单方法
Jul 30 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
PyQt5每天必学之组合框
Apr 20 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
Python骚操作之动态定义函数
Mar 26 Python
opencv设置采集视频分辨率方式
Dec 10 Python
Python如何访问字符串中的值
Feb 09 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 Python
什么是python的函数体
Jun 19 #Python
浅谈Python中的生成器和迭代器
Jun 19 #Python
python中有帮助函数吗
Jun 19 #Python
python中导入 train_test_split提示错误的解决
Jun 19 #Python
python中get和post有什么区别
Jun 19 #Python
python中setuptools的作用是什么
Jun 19 #Python
python怎么判断模块安装完成
Jun 19 #Python
You might like
Memcached常用命令以及使用说明详解
2013/06/27 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
python模块如何查看
2020/06/16 Python
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
物流司机岗位职责
2013/12/28 职场文书
教师申诉制度
2014/01/29 职场文书
旷课检讨书1000字
2014/02/14 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
2014最新实习证明模板
2014/10/02 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
秋菊打官司观后感
2015/06/03 职场文书
校运会广播稿
2015/08/19 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers