天天看點

Python Django 實作檔案上傳,限制檔案大小,儲存上傳檔案 | requests請求上傳檔案

文将上傳大家在平時都會遇到,接下來給大家展示一個小demo,僅供大家參考學習,

版本資訊:

python : 2.7

Django : 1.9

文章目錄

        • 首先前端頁面展示
        • 上html代碼:
        • 上js代碼
        • 上後端代碼
        • requests請求上傳檔案

首先前端頁面展示

大概的樣式如下:

Python Django 實作檔案上傳,限制檔案大小,儲存上傳檔案 | requests請求上傳檔案

上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'})
           

最後上傳的檔案:

Python Django 實作檔案上傳,限制檔案大小,儲存上傳檔案 | requests請求上傳檔案

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
           

·

·

·

歡迎各位大佬指點學習,部落客小菜雞一枚。