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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值