Python Django 实现文件上传,限制文件大小,保存上传文件 | requests请求上传文件

文将上传大家在平时都会遇到,接下来给大家展示一个小demo,仅供大家参考学习,
版本信息:
python : 2.7
Django : 1.9

首先前端页面展示

大概的样式如下:
在这里插入图片描述

上html代码:
<input class="up_file" type="file" accept=".zip" onchange="file_size(this)"><span class="file_size" style="display: none"></span>
<button class="button_file" onclick="up_file()">上传</button>

input参数选择:
·······type :file 文件类型
·······accept :.zip 这里是只允许选择zip压缩包,还有其他参数可选,例如.rar,
具体可以参这篇博客:https://blog.csdn.net/u013379933/article/details/77119796

上js代码

上面共有两个方法,一个是用来判断文件大小的,这里判断的是大于1G不允许上传,
另一个方法是用来上传文件的ajax。

// 文件大小
function file_size(that){
    $('.button_file').css("pointer-events","auto").attr('disabled',false)    // 允许点击
    var files = $(that)[0].files[0];
    {#var number = 1024 * 1024 * 1024;   //1G#}
    // 换算单位
    var unit = 'K';
    var num = files.size;
    if(num > 1024 * 1024){    // M
        unit = 'M'
        num = num / (1024 * 1024)
    }
    if(num > 1024){           // G
        unit = 'G'
        num = num / 1024
    }
    $('.file_size').show().html('文件大小:'+ num.toFixed(2)  + unit)
    if(unit == 'G'){        // G 大于1G
        $('.button_file').css("pointer-events","none").attr('disabled','ture')    // 禁止点击
        alert('文件大小大于1G,请重新选择文件!!')
     }
}

// 上传文件
function up_file() {
    console.log('点击--')
    // 获取文件
    var formdata = new FormData();
    var files = $('.up_file')[0].files[0];   // 文件list
    if(!files){
        alert('请选择文件上传!')
        return
    }
    formdata.append('file',files)
    $.ajax({
        url:'{% url 'ajax_up_file' %}',
        type:'POST',
        cache: false,
        data: formdata,
        processData: false,
        contentType: false,
        success:function (data) {
            if(data.status){
                alert('上上传成功')
            }else{
                alert(data.msg)
            }
        }
    })
}
上后端代码

url接口

    # 上传接口,
    url(r'ajax_up_file/$',AjaxUpFile.as_view(),name='ajax_up_file'),
class AjaxUpFile(View):
    def post(self,request):
        try:
            file = request.FILES.get('file','')
            current_path = os.path.dirname(__file__)        # 当前路径
            file_path = os.path.join(current_path,'matedata')
            if not os.path.exists(file_path):               # 文件夹不存在则创建
                os.mkdir(file_path)
            with open(os.path.join(file_path,file.name),'wb') as fp:    # 写文件
                for i in file.chunks():
                    fp.write(i)
        except Exception as e:
            return JsonResponse({'status': False, 'msg': u'错误:{}'.format(e)})
        return JsonResponse({'status':True,'msg':'ok'})

最后上传的文件:
在这里插入图片描述

requests请求上传文件
# _*_encoding=utf-8_*_
import requests,os

def run(url,path):
    if not os.path.exists(path):
        return u'文件不存在!'
    fp = open(path,'rb')
    try:
        result = requests.post(url,files={'file':fp},)
    except Exception as e:
        print e
        fp.close()
        return u'网络错误'
    fp.close()
    try:
        data = result.json()
        if data.get('status',''):
            return u'上传成功'
        else:
            return u'上传失败'
    except:
        return u'上传失败'


if __name__ == '__main__':
    url = 'http://127.0.0.1:8001/exercise/ajax_up_file/'
    path = u'C:/Users/Carlos/Desktop/激活码.zip'
    d = run(url,path)
    print d

·
·
·
欢迎各位大佬指点学习,博主小菜鸡一枚。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值