1、dropzone.js

http://www.dropzonejs.com/

dropzone.js是一个可预览\可定制化的文件拖拽上传,实现AJAX异步上传文件的工具

2、dropzone.js前端界面上传方式

官网下载 并且引入dropzone.js 和dropzone.css(http://www.dropzonejs.com/)以及引用jquery.js,定义一个class="dropzone"即可完成,

代码示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Flask upload with Dropzone example</title>
<link rel="stylesheet" href="/static/css/dropzone.css" type="text/css" />
<script src="/static/js/jquery-3.3.1.js"></script>
<script src="/static/js/dropzone.js"></script>
</head> <body> 方法1:
<form id ="myAwesomeDropzone" action="{{ request.path }}" class="dropzone" method="POST" enctype="multipart/form-data"></form>
//这段代码是展示dropzone.js的精髓,class一定要是dropzone,id可以自定义
<script type="text/javascript">
//第二种配置,这种使用的是div做上传区域时使用的配置
Dropzone.autoDiscover = false;//不知道该行有什么用,欢迎高手下方评论解答
$("#myAwesomeDropzone").dropzone({
url: "{{ request.path }}",
addRemoveLinks: true,
method: 'post',
filesizeBase: 1024
});
</script>
方法2:
<div class="form-group">
<label class="title">真人照(最多只能传一张)</label>
<div id="dropz" class="dropzone"></div>//这段代码是展示dropzone.js的精髓,class一定要是dropzone,id可以自定义
</div>
<input type="hidden" name="file_id" ng-model="file_id" id="file_id"/> <script type="text/javascript">
var appElement = document.querySelector('div .inmodal');
var myDropzone = new Dropzone("#dropz", {
url: "{{ request.path }}",//文件提交地址
method:"post", //也可用put
paramName:"file", //默认为file
maxFiles:1,//一次性上传的文件数量上限
maxFilesize: 2, //文件大小,单位:MB
acceptedFiles: ".jpg,.gif,.png,.jpeg", //上传的类型
addRemoveLinks:true,
parallelUploads: 1,//一次上传的文件数量
//previewsContainer:"#preview",//上传图片的预览窗口
dictDefaultMessage:'拖动文件至此或者点击上传',
dictMaxFilesExceeded: "您最多只能上传1个文件!",
dictResponseError: '文件上传失败!',
dictInvalidFileType: "文件类型只能是*.jpg,*.gif,*.png,*.jpeg。",
dictFallbackMessage:"浏览器不受支持",
dictFileTooBig:"文件过大上传文件最大支持.",
dictRemoveLinks: "删除",
dictCancelUpload: "取消",
//对一些方法的后续处理
init:function(){
this.on("addedfile", function(file) {
//上传文件时触发的事件
document.querySelector('div .dz-default').style.display = 'none';
});
this.on("success",function(file,data){
alert(data.data)
//上传成功触发的事件
console.log('ok');
});
this.on("error",function (file,data) {
//上传失败触发的事件
console.log('fail');
var message = '';
//lavarel框架有一个表单验证,
//对于ajax请求,JSON 响应会发送一个 422 HTTP 状态码,
//对应file.accepted的值是false,在这里捕捉表单验证的错误提示
if (file.accepted){
$.each(data,function (key,val) {
message = message + val[0] + ';';
})
//控制器层面的错误提示,file.accepted = true的时候;
alert(message);
}
});
this.on("removedfile",function(file){
//删除文件时触发的方法(向后台发送删除文件请求)
{# $.post('/admin/del/'+ file_id,{'_method':'DELETE'},function (data) {#}
{# console.log('删除结果:'+data.message);#}
{# })#} document.querySelector('div .dz-default').style.display = 'block';
});
}
});
</script>
</body>
</html> 方法二中,很多参数是不一定需要定义的,参见方法一 3、后台处理dropzone.js前端界面上传的文件
A、django的settings.py 文件定义上传文件夹:
#文件上传文件夹定义
ENROLLED_DATA = '%s/statics/enrolled_data' %BASE_DIR B、对应的view处理前端上传过来的数据:
from django.views.decorators.csrf import csrf_exempt
from PerfectCRM.settings import *
import os
@csrf_exempt
def upload(request):
if request.method =='POST': #post方式
if request.is_ajax(): #如果是ajax请求
if not os.path.exists(ENROLLED_DATA): #如果settings定义的 上传文件夹不存在
                os.makedirs(ENROLLED_DATA,exist_ok=True)  #新建文件夹
for k,file_obj in request.FILES.items(): #获取前端传过来的文件数据
with open('%s/%s'%(ENROLLED_DATA,file_obj.name),"wb") as f: #打开文件
for chunk in file_obj.chunks():
f.write(chunk) #chunk方式写入文件
    return render(request, 'dropzone-back.html')

C、上传成功:


 
 

django + dropzone.js 上传文件的更多相关文章

  1. 使用ajaxfileupload.js上传文件

    一直以来上传文件都是使用form表单上传文件,也看到过有人使用js上传文件,不过看起来蛮简单的也就没有怎么去理会.今天突然要使用这种方式上传文件,期间还遇到点问题.因此就记录下来,方便以后遇到这样的问 ...

  2. js 上传文件后缀名的判断 var flag=false;应用

    js 上传文件后缀名的判断  var flag=false;应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  3. django实现分片上传文件

    目标:利用django实现上传文件功能 1,先设置路由系统 urls.py from django.conf.urls import url,include from django.contrib i ...

  4. Django之用户上传文件的参数配置

    Django之用户上传文件的参数配置 models.py文件 class Xxoo(models.Model): title = models.CharField(max_length=128) # ...

  5. js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

    ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...

  6. atitit.javascript js 上传文件的本地预览

    atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL  1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ...

  7. Django session cookie 上传文件、详解

    session 在这里先说session 配置URL from django.conf.urls import patterns, include, url from django.contrib i ...

  8. 前端js上传文件 到后端接收文件

    下面是前端js代码: <html> <head> <meta http-equiv="Content-Type" content="text ...

  9. 纯js上传文件 很好用

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

随机推荐

  1. Flink State的两张图

    streamTask的invoke方法中,会循环去调用task上的每个operator的initializeState方法,在这个方法中,会真正创建除了savepointStream的其他三个对象, ...

  2. Spring之JDBC

    jdbc.properties driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ssi?useUnicode ...

  3. 51nod 1565模糊搜索(FFT)

    题目大意就是字符串匹配,不过有一个门限k而已 之前有提到过fft做字符串匹配,这里和之前那种有些许不同 因为只有A,C,G,T四种字符,所以就考虑构造4个01序列 例如,模板串a关于'A'的01序列中 ...

  4. 【ZJ选讲·画山】

    给出一张纸(N × M),你要在上面画山,但不能画出界(N,M<=100) Like this: 起点为(0,0),终点为(N,0) 给出w种线段画法(x,y),表示用了这种画法后,笔迹末 ...

  5. 你是否彻底了解margin属性?

    写css,你少不了与margin打交道.你真的了解margin吗?你知道margin有什么特性吗?你知道什么是垂直外边距合并?margin在块元素.内联元素中的区别?什么时候该用padding而不是m ...

  6. HDU 多校对抗第三场 L Visual Cube

    Problem L. Visual Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java ...

  7. CentOS下SVN服务器的搭建使用

    转载自:http://ailurus.blog.51cto.com/4814469/1168481 SVN作为新一代代码版本管理工具,有很多优点,管理方便,逻辑明确,安全性高,代码一致性高.SVN数据 ...

  8. jquery中的get和post、ajax有关返回值的问题描述

    一:前言 今天我就要离开公司回学校准备考试,在走之前,我自己做的一个模块测试除了一些小的bug.问题如下 我在往数据库中插入数据,首先要选择一级菜单,接着会更具一级菜单生成一级菜单的子目录,在选择日期 ...

  9. [51nod1009]数字1的数量

    解题关键:数位dp,对每一位进行考虑,通过过程得出每一位上1出现的次数 1位数的情况: 在解法二中已经分析过,大于等于1的时候,有1个,小于1就没有. 2位数的情况: N=13,个位数出现的1的次数为 ...

  10. Spring - IoC(8): 基于 Annotation 的配置

    除了基于 XML 的配置外,Spring 也支持基于 Annotation 的配置.Spring 提供以下介个 Annotation 来标注 Spring Bean: @Component:标注一个普 ...