django-カスタムファイルアップロードストレージクラス

ファイルストレージのAPIます。https://yiyibooks.cn/xx/django_182/ref/files/storage.html

カスタムのストレージシステムを書き込みます。https://yiyibooks.cn/xx/django_182/howto/custom-file-storage.html

カスタムクラスの定義を格納するステップ

1.カスタムストレージクラスでなければなりませんdjango.core.files.storage.Storageのサブクラス

2. パラメータなしDjangoはストレージ・クラスをインスタンス化することができなければなりません。これは、すべての設定からでなければならないことを意味しdjango.conf.settingsで取得します。

3.お使いのストレージ・クラスは、_open実装()と()メソッドだけでなく、あなたのクラスを格納するための任意の他の適切な方法を_save必要があります。

4. お使いのストレージ・クラスが破壊されなければならないので、それは、移行の分野で使用されたときにシリアライズすることができます。あなたのフィールドは、あなたがそれを使用できるパラメータの独自の配列を有することができている限りdjango.utils.deconstruct.deconstructible(また、DjangoのFileSystemStorageのものに使用されている)クラスのデコレータを。

カスタムストレージクラス

ツールキットutilsの/ FDFSパッケージを作成します。

 

 

袋をFDFSするクライアント構成ファイルをコピーしますclient.conf

 

 

 構成ファイルを変更Client.conf

ストアファイルのログログファイルへのベースパスではディレクトリ持っている必要があります 
= /ホーム/パイソン/ bj18 / TTSX / dailyfresh / BASE_PATH ログ

#のtracker_serverもう一度最後OCUR内のCANを、そしてtracker_server形式は  「ホスト:ポート」、ホストホスト名またはIPアドレスを指定することができます 
tracker_server = 192.168.137.130:22122

私たちは、ディレクトリ/ home /パイソン/ bj18 / ttsx / dailyfresh / logにログファイルを作成する必要があります

settings.py設定ファイルのパス

#のセットファイルストレージジャンゴ 
DEFAULT_FILE_STORAGE = utils.fdfs.storage.FDFSStorage 
#のセットFDFS使用client.confパス 
FDFS_CLIENT_CONF = ./utils/fdfs/client.conf 
nginxのは、ストレージサーバポートとIPで提供FDFS特許 
FDFS_URL = ' 192.168.137.130:8888 '

初期クラスFDFSStorageのFDFS / storage.py中でのインポート構成の設定

django.core.files.storage インポートストレージ   #のインポートストレージツール
から fdfs_client.client インポート Fdfs_client   #のアップロードクラスのクライアント
から django.conf のインポート設定   #の輸入ジャンゴ・コンフィギュレーション・

クラス FDFSStorage(ストレージ):  アップロードされたストレージクラスを継承するクラスを作成します。
    '' ' FAST DFSファイルストレージクラスを''' 
    DEF  __init__(セルフ、client_conf =なし、BASE_URL = なし)を:
         IF client_confはありませんなし:
            self.client_conf = settings.FDFS_CLIENT_CONF
         IFBASE_URLはありません:なし
            self.base_url = settings.FDFS_URL 

    DEF _open(セルフ、名前、MODE = ' RB '):  は、メソッドを持っている必要があります
        '' ' ファイルを開くときに使用' '' 
        パス

    DEFの _save(セルフ、名前、コンテンツ):  の方法を持っている必要があります
        「」「ファイルを格納する際に使用される「」」
        #の名前は、ファイルのアップロードする:名前は
        #1 引数は、すなわち、例えば、django.core.files.Fileまたはファイルのサブカテゴリーである必要があります:コンテンツが含まれていますあなたは、ファイルのクラスオブジェクトの内容アップロード

        #を作成Fdfd_clientは、オブジェクトの 
        クライアント= Fdfs_client(self.client_conf)
        、DFSシステム高速にファイルをアップロード
        #をupload_by_buffer()ファイルアップロードの内容 
        RES = client.upload_by_buffer(content.read())  は、辞書形式返す
        辞書の
        { 
             'グループ名':GROUP_NAMEを、
        #は     remote_file_id、: 'リモートFILE_ID' 
             「のステータスを':'。はアップロード」、successed 
             'ローカルファイル名を':''、 
             'アップロードサイズ':upload_size、 
             [ストレージIP ':storage_ipの
        } 
        印刷(RES)
         IF res.get(' ステータス')=!' アップロードsuccessed。'res.getは()の内容の辞書を取得します
            。#のアップロードが例外をスロー失敗した
            昇給(例外をFDFSが失敗にファイルをアップロード#は、上述のIDファイルを取得 
        (ファイル名= res.get リモートのfile_id " #は、上記ID言及したファイルを返し
        、戻りファイル名の
     DEFが EXISTSを(自己、名):  コール_save()の前に最初の呼び出しの意志が存在する()メソッド
        「」「Djangoはファイル名かどうかを決定するために使用することができる「」」
        を返す偽;   偽表現は、ファイル名の名前ではありませんが使用することができ

    DEFの URL(自己を、名):  あなたがこのの詳細を示していない場合は、管理URL()が間違っているときに報告されます
        「」「ファイルのURLパスを返します「」」
        リターン 名前

背景192.168.137.130:8000/adminへ

結果を見るために画像を追加

 

おすすめ

転載: www.cnblogs.com/yifengs/p/11617896.html