zoukankan      html  css  js  c++  java
  • Django学习之第三方储存服务器的使用

    最近,越来越多的公司采用第三方储存来作为视频,图片的储存工具。

    国内的像七牛,阿里云的OSS,国外的像亚马逊的S3,微软的azure都是非常有名的第三方储存。

    下面以阿里的OSS为例,来介绍第三储存的使用:

    1.安装python对OSS操作的模块

    pip install oss2

    2.再安装python对OSS储存的模块

    pip install django-aliyun-oss2-storage

    3.设置settings.py文件

        # 使用OSS存储文件
        DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage'
         
        # 配置OSS信息
        ACCESS_KEY_ID = "xxxxxxxxxxx"
        ACCESS_KEY_SECRET = "xxxxxxxxxxx"
        END_POINT = "oss-cn-shanghai.aliyuncs.com"  # OSS存储节点
        BUCKET_NAME = "xxx"
        BUCKET_ACL_TYPE = "public-read"  # private, public-read, public-read-write

    MEDIA_ROOT是媒体文件的上传位置根目录,由于设置了BUCKET_NAME,一般在这个bucket中。所以设置为空字符串。

    文件自然上传到Django模版的FileField字段设置的upload_to位置。

    MEDIA_URL是获取媒体文件的链接前缀,可根据自己的oss文件链接位置添加。

    由于上传的文件需要开放被用户下载,BUCKET_ACL_TYPE设置为公共的。若你的静态文件也需要上传到OSS中,设置如下:

        # 设置上传的静态文件
        STATICFILES_STORAGE = 'aliyun_oss2_storage.backends.AliyunStaticStorage'

    解决文件名称乱码问题:

    打开该包的源码文件backends.py,找到AliyunBaseStorage类的_save方法。修改如下:

        def _save(self, name, content):
            # 获得文件名
            filename = str(content)
         
            # 设置header
            headers = {}
            headers['Content-Type'] = 'application/octet-stream'
            headers['Content-Disposition'] = 'attachment; filename=%s' % filename
         
            # get oss' target name
            name = self._get_target_name(name)
         
            content.open()
            content_str = b''.join(chunk for chunk in content.chunks())
            self.bucket.put_object(name, content_str, headers=headers)  # add headers
            content.close()
         
            return self._clean_name(name)
  • 相关阅读:
    波涛 - 系统交易方法(2013年2月28日)
    【美】柯蒂斯·费思 - 海龟交易法则(2012年12月25日)
    【美】迈克尔·卡沃尔 - 趋势跟踪(2012年12月3日)
    DAX/PowerBI系列
    DAX基础入门
    (玩起来)DAX/PowerBI系列
    DAX/PowerBI系列
    DAX/PowerBI系列
    DAX/PowerBI系列
    MDX 用Ancestors得到Hierarchy中指定Level的值(附带SCOPE用法之一)
  • 原文地址:https://www.cnblogs.com/leomei91/p/7418123.html
Copyright © 2011-2022 走看看