その上に直接ドライ品:
1、ファイルのアップロード:
A。models.py
django.db輸入モデル から。インポート・ストレージ・ クラスUploadFile(models.Model): タイトル = models.CharField(max_lengthを= 50 ) ファイル = models.FileField(upload_to = ' ./filesupload '、ストレージ= storage.FieldStorage()) デフ__unicode __(自己): 戻り値の自己.TITLE クラスのMeta: 発注 = [ ' タイトル' ]
モデルを作成UploadFile、パラメータはファイルのアップロードupload_to位置を示し、
また、あなたは、この前の設定ファイルにMEDIA_URLをMEDIA_ROOTを設定する必要があります。
FILE_UPLOAD_HANDLERS = [
"django.core.files.uploadhandler.MemoryFileUploadHandler"、
"django.core.files.uploadhandler.TemporaryFileUploadHandler"
]
MEDIA_ROOT = os.path.join(BASE_DIR、' ファイル' ) MEDIA_URL = ' /ファイル/ '
データベースの同期
。B新しいforms.pyファイル:
クラスUploadFileForm(forms.Form): タイトル = forms.CharField(max_lengthを= 50 ) ファイル = forms.FileField()
。ここでviews.py方法で書かれたCアップロードファイル:
DEF :(リクエスト)upload_file コンテキスト = {} 場合 request.methodは== ' POST ' : フォーム = UploadFileForm(request.POST、request.FILES) 場合form.is_valid(): タイトル = form.cleaned_data [ ' タイトル' ] ファイル = form.cleaned_data [ ' ファイル' ] uploadfile = UploadFile() uploadfile.title = タイトル uploadfile.file = ファイル uploadfile.save() の戻りはHttpResponse(' 成功' ) それ以外: フォーム = UploadFileForm() コンテキスト[ ' フォーム' ] = フォームの リターンは(要求、レンダリング'アップロード.htmlを'、コンテキスト)
。Dテンプレートupload.htmlを作成します。
<H2 ALIGN = " センター" >上传</ H2> <フォームメソッド= " POST "のenctype = " マルチパート/フォームデータ" > {%csrf_token%} {{form.as_p}} の<input type = " 提出"値= " 送信" > </フォーム>
電子。urls.py
パス(''、views.upload_file、名前= " アップロード")、
。Fの影響:
2.ダウンロード:
私はここに2つの部分に分割され、一つはファイルリスト、ファイルのダウンロードの他の部分があります
A。views.py
DEF DOWNLOAD_FILE(リクエスト): ファイル = UploadFile.objects.all() コンテキスト = {} コンテキスト[ ' ファイル' ] = ファイルを 返す(リクエスト、レンダリング' download.html ' 、コンテキスト)を DEF (リクエスト、file_pk)をダウンロードし たファイル = UploadFile.objects.filter(PK = file_pk)[0] 名 = file.file 名 = STR(ファイル名).split(' / ') - 1 ] filelocal = ' ファイル/ '+ STR(ファイル名) ファイル = オープン(filelocal) DEF file_iterator(FILE_NAME、CHUNK_SIZE = 512 ): (FILE_NAME、オープンと' RB ' Fとして): 一方TRUE: C = f.read(CHUNK_SIZE) 場合:C 収率Cの 他: ブレーク 応答 = StreamingHttpResponse(file_iterator(filelocal)) 応答[ ' のContent-Type ' ] = "アプリケーション/ octet-streamの' 応答[ ' コンテンツの廃棄' ] = ' アタッチメント;ファイル名= " ' + STR(名)+ ' " ' 戻り応答
DOWNLOAD_FILEは、ダウンロードしたファイルのダウンロードリンクをダウンロードするファイルのリストです。ファイルが非常に精通ダウンロードし、そのコードを吸う書き込みされているので、データベースからfile_pkファイルフィルタにより、ファイルへのfilelocalパスが保存されています
。B新しいurls.pyファイル:
パス( 'downloadlist'、views.download_file、名前= "download_list")、
パス(r'download / <INT:file_pk>」、views.download、名前= "ダウンロード")、
C。download.html:
<UL> {%用のファイルにファイル%} <LI> {{file.title}}の<a href= "{% URL'download' file.pk %}" rel= " 外部nofollowを"> </我下载点> </ LI> {%ENDFOR%} </ UL>
dがstorage.pyを作成しました:
執筆の過程で、私は、私は中国の、ダウンロードしたファイルのエラーを含むファイル名をするとき、これがある理由(私にはわからないことがわかったので、これは、名前を変更するファイルをアップロードするためである......ファイルは、通常のオープンからダウンロードできるように)、そして、他の大きな神のブログからのファイルの名前を変更する方法を発見。
django.core.files.storage インポートFileSystemStorageの インポートOS、時間、ランダム クラス:のFieldStorage(FileSystemStorage) から django.conf インポート設定 デフ __init__(自己、位置= settings.MEDIA_ROOT、BASE_URL = settings.MEDIA_URL)を: スーパー(のFieldStorage、自己)。__init__ (位置、BASE_URL) DEF _save(自己、名前、コンテンツ): EXT = os.path.splitext(名)[1 ] D = os.path.dirname(名) FN = time.strftime(' %Yの%mを%D%のH%のM%のS ' ) FN= FN + ' _%D '%random.randint(10000、99999 ) 名前= os.path.join(D、FN + EXT) 戻りセーブ._スーパー(のFieldStorage、自己)(名前、コンテンツ)
。E効果: