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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM