文将上傳大家在平時都會遇到,接下來給大家展示一個小demo,僅供大家參考學習,
版本資訊:
python : 2.7
Django : 1.9
文章目錄
-
-
-
- 首先前端頁面展示
- 上html代碼:
- 上js代碼
- 上後端代碼
- 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'})
最後上傳的檔案:
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
·
·
·
歡迎各位大佬指點學習,部落客小菜雞一枚。