django之集成七牛云对象存储

Python3 + Django2.0 集成 “七牛云” 对象存储

(SDK文档地址:http://developer.qiniu.com/kodo/api/3928/error-responses

步骤1:

  在七牛云中创建一个 “存储空间”(需要实名认证,每月免费10GB)

步骤2:

  在 “个人面板” --> “秘钥管理” 中得到:ccessKey/SecretKey

步骤3:  

  在django虚拟运行环境中安装 “qiniu” SDK:pip install qiniu

步骤4:使用

  1> 获取七牛云的 token :授权码

# 获取七牛云授权 token
def qiniu_token(request):
    # 七牛云授权秘钥(在七牛云中可以得到)
    access_key = settings.UEDITOR_QINIU_ACCESS_KEY
    secret_key = settings.UEDITOR_QINIU_SECRET_KEY
    # 存储对象名称(在七牛云中可以得到)
    bucket_name = settings.UEDITOR_QINIU_BUCKET_NAME
    # 获得七牛云授权对象 q
    q = Auth(access_key,secret_key)
    # 获得一个授权的token
    token = q.upload_token(bucket_name)
    # 将七牛云的授权 token 返回给前端
    # return restful.result(data={‘token‘:token})# 这个是我在项目中集成的通用返回方法
    return JsonResponse({"data":{"token":"token"}})

  2> js方式上传文件到七牛云:

<!--前端代码-->
<!-- 将 file 按钮放在 label 标签中,并将 file 按钮隐藏,达到想要的效果,因为 file 类型按钮样式是固定的将他放在label中,点击label标签就相当于点击了 file 文件上传按钮-->
<label class="btn btn-file btn-default"><input type="file" hidden id="upload_news_file">上传图片</label>
"""
后端代码
"""
function News(){}
// 上传文件至七牛云中监控上传 进度 处理方式,来自:observable.subscribe()对象News.prototype.listenQiniuNext = function (response) {    /*    * observable 中 subscribe 属性:Next(res)    * res 参数是一个带有 total 字段的 object,包含loaded、total、percent三个属性:    *   loaded:已上传文件大小,单位:L字节    *   total:本次上传的总量控制信息,单位字节,跟文件大小并不一致    *   percent:当前上传文件的进度,范围:0 - 100    *    * **** 要先得到字段 total :result.total ****    * */

var total = response.total;    // toFixed(index):保留index为小数    var percent = total.percent.toFixed(0) + "%";  console.log("文件上传进度:" + percent
);};// 上传文件至七牛云中监控上传 出错 处理方式,来自:observable.subscribe()对象News.prototype.listenQiniuError = function (error) {    /*    * objservable 中 subscribe 的属性:error(err)    * 参数 err 为一个包含 code、message、isRequestError 三个属性的 object 对象:    *   code:错误码    *   message:错误信息,包含错误吗    *   reqld:xhr请求错误的 X-Reqid    * */    console.log("文件上传出现错误,错误信息:" + error.message);};
// 上传文件至七牛云中监控上传 完成 处理方式,来自:observable.subscribe()对象News.prototype.listenQiniuComplete = function (response) {    /* 接收上传完成后的后端返回信息,res 参数为一个 object,     * 为上传成功后后端返回的信息,具体返回结构取决于后端sdk的配置,     * 可参考上传策略。     * */    // {hash: "FuAB5QBnVM_CWrw7WGc7jm7LAdyO", key: "1534507254079png"} 默认返回hash与key两个参数    console.log(response);};
// 将文件上传到七牛云服务器
News.prototype.listenUpload_news_file_qiniu_Event = function () {
    var self = this;
    var uploadBtn = $(‘#upload_news_file‘);
    // 定义一个变量保存文件上传的状态
    var uploading = false;

    // change事件:在选择文件后出发
    uploadBtn.change(function () {
        var file = this.files[0];        // get请求,可以使用ajax get 请求
        $.get({       // 这里是服务端处理的视图函数地址
            ‘url‘: ‘/cms/qiniu_token/‘,
            ‘success‘: function (result) {
                if (result[‘code‘] === 200) {
                    // 得到服务端返回的 token 验证信息
                    var token = result[‘data‘][‘token‘];
                    var houzhui = file.name.split(‘.‘);
                    // 使用当前时间戳作为文件的key
                    var key = new Date().getTime() + "." + houzhui[houzhui.length - 1];

                    var config = {
                        // 是否使用cdn加速
                        useCdnDomain: true,
                        // 服务器地址:华东,华南......
                        region: qiniu.region.z0,
                        // 如果产生错误,重新上传次数
                        retryCount: 6
                    };

                    var putExtra = {
                        // 上传文件的名称
                        fnName: key,
                        // 文件上传时使用的一些参数
                        params: {},
                        // 限制文件上传的类型
                        mimeType: ["image/png", "image/jepg", "image/gif"]
                    };

                    var observable = qiniu.upload(file, key, token, putExtra, config);
                    /* subscribe对象有三个属性:next,error,complete
                    * */
                    observable.subscribe({
                        /** 如果使用 self.listenQiniuNext() 会报错
                         ** 必须使用 self.listenQiniuNext,因为作为一个参数传递
                         ** 绑定方法后,会改变方法的所属对象,比如绑定后方法不再属于 News,所以无法使用 News 中定义的属性
                         * **/

                        // 文件上传进度监控
                        ‘next‘: self.listenQiniuNext,
                        // 文件上传产生错误时触发
                        ‘error‘: self.listenQiniuError,
                        // 当文件上传完成时触发
                        ‘complete‘: self.listenQiniuComplete
                    });
                }
            }
        });
    });
};

News.prototype.run = function () {
    // 将文件上传到千牛服务器
    this.listenUpload_news_file_qiniu_Event();
};

$(function () {
    var news = new News();
    news.run();
});

  3> python上传图片到七牛云(在博客 ”django之百度Ueditor富文本编辑器后台集成” 笔记中的文件上传后台处理中有应用):

# 参数:
# upfile: 文件(前端传过来的文件)
# filename: 文件名
  def _upload_to_qiniu(self, upfile, filename):
        """
        上传文件到七牛
        """
        if not sys.modules.get(‘qiniu‘):
            raise RuntimeError(‘没有导入qiniu模块!‘)     # 配置自己的 access_key,secret_key
        q = qiniu.Auth(<UEDITOR_QINIU_ACCESS_KEY>, <UEDITOR_QINIU_SECRET_KEY>)     # 配置自己的: 空间名称
        token = q.upload_token(<UEDITOR_QINIU_BUCKET_NAME>)
        buffer = BytesIO()
        for chunk in upfile.chunks():
            buffer.write(chunk)
        buffer.seek(0)
        ret, info = qiniu.put_data(token, filename, buffer.read())
        if info.ok:       # 配置自己的域名:DOMAIN:http://七牛云的域名/
            url = parse.urljoin(UEDITOR_QINIU_DOMAIN, ret[‘key‘])
            return ‘SUCCESS‘, url, ret[‘key‘], ret[‘key‘]
        else:
            return ‘FAIL‘, None, None, None

原文地址:https://www.cnblogs.com/jingxuan-li/p/9503399.html

时间: 2024-10-07 08:02:02

django之集成七牛云对象存储的相关文章

七牛云--对象存储

七牛云--对象存储(此 SDK 适用于 Java 7 及以上版本) 使用maven创建工程:pom.xml配置文件 <!-- java 7及以上版本, qiniu-java-sdk的版本[7.2.0, 7.2.99]--> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0, 7.

使用FileZilla Pro S3协议访问七牛云对象存储

使用FileZilla Pro S3协议访问七牛云对象存储 https://blog.qiniu.com/archives/8882 https://wiki.filezilla-project.org/Pro:S3_Provider_Configuration 原文地址:https://www.cnblogs.com/sandeepin/p/12236449.html

CodeIgniter - 集成七牛云存储

最近有一个项目需要集成七牛云存储的图片存储和调用功能,程序是基于CodeIgniter2.1.3的PHP框架.刚拿到手完全无从下手的感觉,因为像框架这种东西,想从官方的PHPSDK集成进去,需要改动很多地方.还好,有前辈蹚水,我等后辈直接参考或者说是拿来用了.上传插件采用的是plupload. plupload:www.plupload.com/ 多附件上传控件plupload的使用心得:www.cnblogs.com/luckybird/archive/2013/01/15/2861072.h

WP集成七牛云存储(原创)

借助:七牛镜像存储 WordPress 插件 https://wordpress.org/plugins/wpjam-qiniu/ 安装本插件1.4.5及以上版本,请先安装并激活WPJAM BASIC插件.如果是使用1.4.5以下版本,WPJAM BASIC插件已包含七牛插件,如果启用WPJAM BASIC插件,请先停用插件. 个人总结: 1.在七牛设置一个公开的空间 2.绑定域名在加速域名这里填写自己的网站的二级域名,比如:cdn.yoursite.com .最后点击创建. 3.去你的网站域名

七牛云 网络存储 文件上传

设置自定义域名: 如果你的域名没有备案,哪种云存储都用不了,就不要尝试了.七牛云存储添加自定义域名和域名解析图文教程:http://boke112.com/3870.html 上传文件到七牛 配置依赖: implementation 'com.squareup.okhttp3:okhttp:3.8.0' implementation 'com.squareup.okio:okio:1.13.0' implementation 'com.qiniu:qiniu-android-sdk:7.3.12

在django中使用七牛云

一.配置环境 django 3.0.3 qiniu 7.2.6 全部可以使用pip安装 二.在app的目录下创建qiniu_config.py文件,用于存放七牛云的相关配置信息 qiniu_config = { 'access_key': '', 'secret_key': '', 'bucket_name': '', 'domine': '', } #bucket_name:空间名 #domine:cdn加速域名 三.views.py from django.shortcuts import

七牛云 X 英语流利说:教育 3.0 时代的智能突破

美国当地时间 2018 年 9 月 27 日,国内领先的人工智能驱动的教育科技公司「英语流利说」正式挂牌纽交所,以其独创的教育 3.0 模式,成为中国「AI+ 教育」第一股. 教育 3.0 时代的智能突破 移动互联网的发展,使得教育行业从线下传统课堂的「教育 1.0 」时代发展到了在线远程教育的「教育 2.0 」时代.虽然相比于传统的线下教育,在线教育突破了时间.地域的限制,满足了用户一切碎片化的学习需求,但同为以「真人教师」为核心的教育课堂,课程成本高企.学习效率难控.师资质量不均等问题依然存

上手七牛云存储

早就听说过七牛云存储,终于有时间上手实践. 1.第一步,注册七牛账号,由于是测试,首先申请的是个人账号 2.注册成功之后,默认是体验账号,每月只有1G的空间容量及1G的下载流量 3.账号认证,认证成功之后将升级为标准账号,每月有10G的空间容量及20G的下载流量 虽然认证麻烦了些,但看得出来,七牛还是很良心的,这种免费套餐对于一般的小型网站应用来说应该是足够了 说明一下,认证表单里,有一个“个人网址”的文本框,一开始我以为是空间的自定义域名,后来试了一下,应该就是个人网站地址,可以随便填,不影响

Android开发中使用七牛云存储进行图片上传下载

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了.可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端S