django 配置阿里云OSS存儲media文件的例子
1. 安裝django-aliyun-oss2-storage包
linux上用 pip install django-aliyun-oss2-storage 無報錯,順利安裝
windows上報錯:
(python3_sbs) F:\projects\virtualenv\python3_sbs\Scripts>pip install django-aliyun-oss2-storage Collecting django-aliyun-oss2-storage Using cached django-aliyun-oss2-storage-0.1.5.tar.gz Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\super\AppData\Local\Temp\pip-build-pb4u0qtw\django-aliyun-oss2-storage\setup.py", line 5, in <module> README = readme.read() UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 63: illegal multibyte sequence ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in C:\Users\super\AppData\Local\Temp\pip-build-pb4u0qtw\django-aliyun-oss2-storage\
解決方法:
1. 下載源碼 django-aliyun-oss2-storage-0.1.5.tar.gz 地址: https://github.com/xiewenya/django-aliyun-oss2-storage
2. 解壓進入解壓后的文件夾
3. 打開README.md 刪除所有內(nèi)容
4. 安裝
python setup.py install
2. 設(shè)置setting.py
ACCESS_KEY_ID = "xxxx" ACCESS_KEY_SECRET = "xxxx" END_POINT = "oss-cn-beijing.aliyuncs.com" PREFIX_URL = 'http://' BUCKET_NAME = "xxx" ALIYUN_OSS_CNAME = "" # 自定義域名,如果不需要可以不填寫 BUCKET_ACL_TYPE = "public-read" # private, public-read, public-read-write DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage' MEDIA_URL = '/media/' MEDIA_ROOT = "media"
順便提一下,當(dāng)在xadmin后臺上傳文件, filename的時候,文件會上傳到路徑
PREFIX_URL + BUCKET_NAME+"."END_POINT+MEDIA_URL+filename
但是在django 模板渲染html的時候,我們?nèi)ilename是按照格式:
<img src="{{ MEDIA_URL }}{{ object.image }}"
前端html render出來后,其實看到的路徑是:
<img src="/media/image/2017/12/timg.jpg"
根本取不到阿里云服務(wù)器上的文件。所以需要設(shè)置個新的變量,如 ALI_MEDIA_URL在模板渲染的時候替換MEDIA_URL.
方法:
1. 創(chuàng)建新文件my_processor.py
from __future__ import unicode_literals import itertools from django.conf import settings from django.middleware.csrf import get_token from django.utils.encoding import force_text from django.utils.functional import SimpleLazyObject, lazy def ali_media(request): """ Adds media-related context variables to the context. """ return {'ALI_MEDIA_URL': settings.ALI_MEDIA_URL}
2. setting.py中
ALI_MEDIA_URL = PREFIX_URL + BUCKET_NAME + "." + END_POINT + '/media/' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.media', 'utils.sbs_processor.ali_media', ], }, }, ]
3. 在模板中設(shè)置為:
<img src="{{ ALI_MEDIA_URL }}{{ object.image }}"
3. 設(shè)置uediitor
在DjangoUeditor/view.py中
之前存儲到本地的代碼是:
# 保存上傳的文件 def save_upload_file(PostFile, FilePath): try: f = open(FilePath, 'wb') for chunk in PostFile.chunks(): f.write(chunk) except Exception as e: f.close() return u"寫入文件錯誤:%s" % e f.close() return u"SUCCESS"
我們模仿這個寫一個上傳到阿里云:
#保存上傳文件到aliyun def save_upload_file_to_aliyun(PostFile, Outputfile): access_key = ACCESS_KEY_ID secret_key = ACCESS_KEY_SECRET bucket_name = BUCKET_NAME try: import oss2 auth = oss2.Auth(access_key, secret_key) bucket = oss2.Bucket(auth, END_POINT, bucket_name) # ret, info = put_file(token, key, upload_file) result=bucket.put_object(Outputfile, PostFile) return u"SUCCESS" # if ret.get('key',None) == None: # raise Exception('upload error') # else: # return u"SUCCESS" except Exception as e: print(str(e)) return str(e)
在哪調(diào)用呢? 找到:
state = save_upload_file(file, os.path.join(OutputPath, OutputFile))
替換成:
state = save_upload_file_to_aliyun(file, OutputPathFormat)
配置結(jié)束。ueditor和xadmin上傳的圖片都會上傳到阿里云oss中
以上這篇django 配置阿里云OSS存儲media文件的例子就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pandas中DataFrame的分組/分割/合并的實現(xiàn)
這篇文章主要介紹了Pandas中DataFrame的分組/分割/合并的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python中不同圖表的數(shù)據(jù)可視化的實現(xiàn)
數(shù)據(jù)可視化是以圖形格式呈現(xiàn)數(shù)據(jù)。它通過以簡單易懂的格式匯總和呈現(xiàn)大量數(shù)據(jù),幫助人們理解數(shù)據(jù)的重要性,并有助于清晰有效地傳達(dá)信息。本文為大家準(zhǔn)備了Python實現(xiàn)不同圖表數(shù)據(jù)可視化的代碼,需要的可以參考一下2022-08-08在python shell中運行python文件的實現(xiàn)
今天小編就為大家分享一篇在python shell中運行python文件的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python爬蟲scrapy框架Cookie池(微博Cookie池)的使用
這篇文章主要介紹了Python爬蟲scrapy框架Cookie池(微博Cookie池)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01