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 相关文章推荐
跟老齐学Python之集合的关系
Sep 24 Python
Python中selenium实现文件上传所有方法整理总结
Apr 01 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
selenium+python实现自动登录脚本
Apr 22 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
python tornado微信开发入门代码
Aug 24 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
Python3中对json格式数据的分析处理
Jan 28 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
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
python开启多个子进程并行运行的方法
2015/04/18 Python
Python编程中的for循环语句学习教程
2015/10/14 Python
python实现求最长回文子串长度
2018/01/22 Python
Python实现多进程的四种方式
2019/02/22 Python
np.dot()函数的用法详解
2020/01/17 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
python和php哪个更适合写爬虫
2020/06/22 Python
html5 标签
2009/07/16 HTML / CSS
C语言开发工程师测试题
2016/12/20 面试题
年终自我鉴定
2013/10/09 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
入党自我评价范文
2014/02/02 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
2014植树节活动总结
2014/03/11 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
技术负责人任命书
2014/06/05 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers