天天看點

django的上傳檔案(比較複雜的一種)

django的上傳檔案

models.py

#encoding=utf-8

from django.db import models 

class Photo(models.Model): 

    file = models.FileField(upload_to='photos/%Y/%m/%d',blank=True,null=True)  一個檔案上傳字段

   upload_to 一個本地的檔案系統路徑,被附加到你的 MEDIA_ROOT 設定後面,這決定了 get_<fieldname>_url() 輔助函數的輸出  

例如,你的 MEDIA_ROOT 設定為 '/home/media' , upload_to 設定為 'photos/%Y/%m/%d' 。其中 '%Y/%m/%d' 部分是日期格式化串: '%Y' 為4位的年份, '%m' 是兩位月份, '%d' 是兩位的日期。如果你在2007年1月15日上傳檔案,這個檔案就會被儲存在/home/media/photos/2007/01/15 目錄下。

views.py檔案

from django.http import HttpResponseRedirect

from django.http import HttpResponse

from django.shortcuts import render_to_response

from django.conf import settings

import os

def upload_file(request):

    if request.method == 'POST':

       file = request.FILES.get('filename','')

       filename=file.name

       fname = os.path.join(settings.MEDIA_ROOT,filename)

       if os.path.exists(fname):  判斷檔案夾是否存在

         os.remove(fname)

         dirs= os.path.dirname(fname)  如果fname是完整路徑 則輸出完整的 否則為空

         if not os.path.exists(dirs):  判斷這個路徑是否存在

            os.makedirs(dirs)   如果不存在則建立這個目錄

       if os.path.isfile(fname):  判斷是否為檔案,是true,不是False,

             os.remove(fname) 

       fp = open(fname, 'wb')  讀寫打開這個要上傳的檔案

       for content in file.chunks(): 寫

         fp.write(content)

       fp.close()

       return HttpResponse('ok') 如果上傳成功則傳回ok

    return render_to_response("upload.html",locals())      

upload.html

<form method="POST" action="/file/" enctype="multipart/form-data" name="form">

選擇檔案: <input type="file" name="filename" /><br>

<input type="submit" value="上傳">

</form>

urls.py

(r'^file/$','upload.views.upload_file'),

settings:

MEDIA_ROOT = 'c:/mm'         将上傳的檔案儲存到c:/mm檔案夾下