美文网首页
Django使用第三方存储服务器

Django使用第三方存储服务器

作者: ___大鱼___ | 来源:发表于2019-02-18 18:39 被阅读12次

    Django用阿里云存储oss进行存储静态文件

    1. 首先登陆阿里云购买阿里云oss第三方存储库。购买之后获得密钥等信息。

    接着,安装oss2库,该库是Python对应oss的操作库。
    pip install oss2

    再安装或下载Django OSS的Storage库。这些库是继承Django的Storage类,并重写相关方法。Django的Stroage是管理上传文件的存储。如何自定义Storage可参考

    执行如下命令,安装Django-Aliyun-OSS2-Storage:

    pip install django-aliyun-oss2-storage

    3. 配置Django的setting.py

    # 使用OSS存储文件
    DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage'
     
    # 配置OSS信息
    ACCESS_KEY_ID = "xxxxxxxxxxx"
    ACCESS_KEY_SECRET = "xxxxxxxxxxx"
    END_POINT = "oss-cn-shenzhen.aliyuncs.com"  # OSS存储节点
    BUCKET_NAME = "xxx"
    BUCKET_ACL_TYPE = "public-read"  # private, public-read, public-read-write
    ALIYUN_OSS_CNAME  = ""  # 使用自有域名 没有的可以忽略
    

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

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

    5.设置无误后,重启Django即可使用。上传文件将自动上传到OSS中。

    上面提到我要修改里面的源码。因为发现上传的文件在下载时的文件名是一串乱码,不是上传时的文件名。这个需要设置一些header信息,可参考
    打开该包的源码文件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)
    
    这样设置,点击文件链接,即可下载并且下载文件名是上传的文件名。若你不是什么类型文件都需要这么处理,可以判断filename的后缀名加以处理。
    
    个人博客: https://www.1117.work
    参考文档: http://yshblog.com/blog/172

    相关文章

      网友评论

          本文标题:Django使用第三方存储服务器

          本文链接:https://www.haomeiwen.com/subject/cejzeqtx.html