激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Django Admin 上傳文件到七牛云的示例代碼

Django Admin 上傳文件到七牛云的示例代碼

2020-06-20 10:55Andy Python

這篇文章主要介紹了Django Admin 上傳文件到七牛云的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

中文圈關于Django Admin 上傳文件七牛云的資料和函數庫已經是2年前的了,國外的則都是關于AWS S3、Azure Storage一些國外的服務的。我根據Django的文檔里提到的存儲系統來實現上傳文件到七牛云的簡單功能。

在Django Admin的表單是根據數據模型生成的,其中文件上傳由FileField和繼承FileField的ImageField來決定的,文件上傳到靜態文件目錄,數據庫保存相對路徑。實現上傳文件到七牛云我們是根據FileField的storage參數來實現的。

models.ImageField(storage=MyStorage())

storage參數需要傳入一個實現抽象類Storage的對象。

下面引用文檔的原句

你自定義的存儲系統必須為Django.core.files.storage.Storage的一個子類:

?
1
2
3
4
5
6
7
8
from django.conf import settings
from django.core.files.storage import Storage
 
class MyStorage(Storage):
  def __init__(self, option=None):
    if not option:
      option = settings.CUSTOM_STORAGE_OPTIONS
    ...

然后重寫全部的抽象方法,具體的可以去官網文檔看。我們這里先不繼承Storage。我在Django的核心里找到了已經繼承了的FileSystemStorage,我想只要繼承Django標準的文件管理類

FileSystemStorage,重載_save部分變成上傳到七牛云不就好了。說干就干。

?
1
2
3
4
5
6
7
8
class MyStorage(FileSystemStorage):
  def _save(self, name, content):
    # 延續原方法的寫法
    filename = name.replace('\\', '/')
    # 將文件傳入封裝好的對象里
    q = Qiniu()
    q.upload_stream(filename, content.file.getvalue())
    return filename

我簡單寫一下封裝的Qiniu上傳的類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Qiniu():
  def __init__(self):
    self.access_key = settings.QINIU_ACCESS_KEY
    self.secret_key = settings.QINIU_SECRET_KEY
    # 要上傳的空間
    self.bucket_name = settings.QINIU_BUCKET_NAME
    # 構建鑒權對象
    self.auth = Auth(self.access_key, self.secret_key)
    
  def get_token(self, key):
    """
 
    :param key: 文件名
    :return: 上傳令牌
    """
    policy = {
      'scope': settings.QINIU_BUCKET_NAME,
      'mimeLimit': 'image/jpeg;image/png',
      'deadline': 3600
    }
    # 3600為token過期時間,秒為單位。3600等于一小時
    token = self.auth.upload_token(self.bucket_name, key, 3600, policy)
    return token
    
  def upload_stream(self, filename, stream_data):
    """
 
    :param filename: 文件名
    :param stream_data: 二進制數據
    :return: 無
    """
    # 上傳后保存的文件名
    key = filename
    # 生成上傳 Token,可以指定過期時間等
    token = self.auth.upload_token(self.bucket_name, key, 3600)
    # 要上傳文件的本地路徑
    # localfile = file_path
    ret, info = put_data(up_token=token, key=key, data=stream_data)
    assert ret['key'] == key
    # assert ret['hash'] == etag_stream(stream_data)

參考資料:

https://docs.djangoproject.co ...

總結

到此這篇關于Django Admin 上傳文件到七牛云的文章就介紹到這了,更多相關Django Admin 上傳文件到七牛云內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000022978119

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕精品在线视频 | 欧美精品免费一区二区三区 | 国产视频在线观看免费 | 在线播放黄色网址 | 91a在线观看 | 99精品视频在线观看免费播放 | 免费a级黄色片 | 精品国产一区二区三区天美传媒 | 国产乱xxxx | 成人男男视频拍拍拍在线观看 | 羞羞视频免费观看网站 | 全黄裸片武则天艳史 | 成人在线视频免费 | 日韩在线播放第一页 | 成人免费福利视频 | 欧美zoofilia杂交videos | 19禁国产精品福利视频 | av资源在线| 一级做a爱性色毛片免费1 | 亚洲啊v在线观看 | jizzzxxxxhd | 黄色一级毛片免费看 | 日韩欧美电影在线观看 | 国产精品久久久久久久久久了 | 全黄裸片武则天艳史 | 久久久久国 | 欧美精品一区自拍a毛片在线视频 | 久久久久北条麻妃免费看 | 欧美亚洲一区二区三区四区 | 国产一区毛片 | 色吧久久 | 亚洲天堂在线电影 | 国产xxxx免费 | 成人激情综合网 | 黄色成人短视频 | av免费在线免费观看 | 日本特级a一片免费观看 | 成人毛片在线免费观看 | 国产免费一区二区三区网站免费 | 久久千人斩 | av在线播放亚洲 |