django的上传文件(比较复杂的一种)

来源:互联网 发布:毛笔字软件中文版 编辑:程序博客网 时间:2024/06/04 13:36

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文件夹下