文将上传大家在平时都会遇到,接下来给大家展示一个小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
·
·
·
欢迎各位大佬指点学习,博主小菜鸡一枚。