一、控件下载:https://github.com/kartik-v/bootstrap-fileinput/

  官网:http://plugins.krajee.com/file-input

  需要引入的文件:1、jquery.js

          2、bootstrap.js  bootstrap.css

          3、font-awesome.css  控件图标使用的是font-awesome,因此需要引入

          4、finleinput.js  fileinput.css

          5、zh.js  设置中文,默认为英文

二、使用实例:

  1、HTML: multiple设置批量上传,只需要将 class 设置为 file-loading 即可,如果设置为 class="file" 则中文无法生效,效果如下

<input id="upload-file" type="file" class="file-loading" name="attachment" multiple />

  

  2:初始化:js代码,否则使用默认设置,详细api参考官网:http://plugins.krajee.com/file-input

  

            var aryFiles = Array();
$('#upload-file').fileinput({
language: 'zh', // 设置语言,需要引入locales/zh.js文件
uploadUrl: '/att_upload/', // 上传路径
maxFileSize: 0, // 上传文件大小限制,触发 msgSizeTooLarge 提示
// {name}:将被上传的文件名替换,{size}:将被上传的文件大小替换,{maxSize}:将被maxFileSize参数替换。
msgSizeTooLarge: '"{name}" ({size} KB) 超过允许的最大上传大小 {maxSize} KB。请重新上传!',
showPreview: true, // 展示预览
showUpload: true, // 是否显示上传按钮
showCaption: true, // 是否显示文字描述
showClose: false, // 隐藏右上角×
uploadAsync: true, // 是否异步上传
initialPreviewShowDelete: true, // 预览中的删除按钮
autoReplace: true, // 达到最大上传数时,自动替换之前的附件
uploadExtraData: function () { // uploadExtraData携带附加参数,上传时携带csrftoken
return {csrfmiddlewaretoken: $.cookie('csrftoken'), doc_uuid: $('[name=doc_uuid]').val()}
},
initialPreview :[],  // 默认预览设置,回显时会用到
initialPreviewConfig: [],  // 默认预览的详细配置,回显时会用到
}).on("fileuploaded", function (e,data,previewId,index) {
// 上传成功后触发的事件
}).on("fileclear", function (e) {
// 移除按钮触发的事件,用该事件批量删除
$.ajax({
url: '/del_all_att/',
method: 'post',
dataType: 'json',
data: {'aryFiles': JSON.stringify(aryFiles)},
success: function (data) {
              
}
})
}).on("filepredelete", function (e, key, jqXHR, data) {
// 预览中删除按钮,删除上传的文件触发的事件
}).on("fileloaded", function (e, file, previewId) {
// aryFile.length = 0;
// 加载预览后触发的事件,将所有文件名添加到全局变量 aryFiles 数组中
aryFiles.push(file.name);
})

  3、django:

    setting代码:

# 上传文件路径
MEDIA_URL = '/upload_files/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload_files')

    url代码:对应fileinput中的 uploadUrl 参数

  

urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'att_upload/', views.attachment_upload, name='att_upload'),  # 上传
re_path(r'del_doc_file/', views.del_doc_file, name='del_doc_file'),  # 单个删除
re_path(r'del_all_att/', views.del_all_att, name='del_all_att'),  # 批量删除
]
# 上传文件url路径
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

    views代码:

def attachment_upload(request):
att_file = request.FILES.get('attachment', None)
doc_uuid = request.POST.get('doc_uuid', None)
  
if att_file:
# 保存文件到硬盘中
file_dir = os.path.join(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'upload_files'), att_file.name)
f = open(file_dir, 'wb')
for i in att_file.chunks():
f.write(i)
f.close()
# 下载和预览的url
url = settings.MEDIA_URL + att_file.name
file_type = re.search(r'[^.]+\w$', att_file.name).group()  # 提前文件后缀名      # 文件类型,可自行增删
img_list = ['jpg', 'jpeg', 'jpe', 'gif', 'png', 'pns', 'bmp', 'png', 'tif']
pdf_list = ['pdf']
text_list = ['txt', 'md', 'csv', 'nfo', 'ini', 'json', 'php', 'js', 'css'] # bootstrap fileinput 上传文件的回显参数,initialPreview(列表),initialPreviewConfig(列表)
initialPreview = []
     # 根据上传的文件类型,生成不同的HTML,
if file_type in img_list:
initialPreview.append("<img src='" + url + "' class='file-preview-image' style='max-width:100%;max-height:100%;'>")
elif file_type in pdf_list:
initialPreview.append("<div class='file-preview-frame'><div class='kv-file-content'><embed class='kv-preview-data file-preview-pdf' src='" + url +
"' type='application/pdf' style='width:100%;height:160px;'></div></div>")
elif file_type in text_list:
initialPreview.append("<div class='file-preview-frame'><div class='kv-file-content'><textarea class='kv-preview-data file-preview-text' title='" + att_file.name +
"' readonly style='width:213px;height:160px;'></textarea></div></div>")
else:
initialPreview.append("<div class='file-preview-other'><span class='file-other-icon'><i class='glyphicon glyphicon-file'></i></span></div>") initialPreviewConfig = [{
'caption': att_file.name,  # 文件标题
'type': file_type,  # 文件类型
'downloadUrl': url,  # 下载地址
'url': '/del_doc_file/',  # 预览中的删除按钮的url
'size': os.path.getsize(file_dir),  # 文件大小
'extra': {'doc_uuid': doc_uuid}, # 删除文件携带的参数
'key': att_file.name,  # 删除时ajax携带的参数
}]
     # 返回json数据,initialPreview initialPreviewConfig 会替换初始化插件时的这两个参数 append:True 将内容添加到初始化预览
return HttpResponse(json.dumps({'initialPreview':initialPreview, 'initialPreviewConfig':initialPreviewConfig,'append': True}))
else:
return HttpResponse(json.dumps({'status': False}))

  删除代码就不上传了,可根据自行需求去写,注意:request.POST.get() 获取,attachment_upload 方法中 initialPreviewConfig 设置的 extra 和 key的值就行了。

  批量删除暂时没有找到官方提供的方法,所以使用的是 fileloaded,fileclear 两个事件配合完成的。有知道的道友希望能告知下,万分感谢。。

  写得不好请大家谅解,有错误或需要修改的地方请大家及时指出。

bootstrap fileinput控件 + django后台上传、回显简单使用的更多相关文章

  1. bootstrap fileinput控件上传文件大小限制

    部分js: language: "zh",//设置语言 showCaption: true,//是否显示标题 showUpload: true, //是否显示上传按钮 showPr ...

  2. 利用bootsrap控件 实现文件上传功能

    源代码实例:https://github.com/kartik-v/bootstrap-fileinput 一.jsp页面 <%@ page language="java" ...

  3. FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...

  4. bootstrap日期控件(双日期、清空等问题解决)

    bootstrap以它优美的外观和丰富的组件,使它成为目前最流行的前端框架.在项目开发中,我们使用它的日期控件确实遇到了一些问题: 1.日期控件后面两个图标点击触发失效 2.双日期关联问题 3.双日期 ...

  5. Bootstrap 时间控件datetimepicker与timepicker

    一.datetimepicker 首先,我们看看点击选择时间的时候的展示页面吧 年                                                月           ...

  6. js插件---Bootstrap 树控件

    js插件---Bootstrap 树控件 一.总结 一句话总结:可以直接用gojs,或者搜索js,jquery的树控件,或者bootstrap树控件,一大堆 gojs 二.JS组件系列——Bootst ...

  7. 在EasyUI项目中使用FileBox控件实现文件上传处理

    我在较早之前的随笔<基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用>Web框架介绍中介绍了基于Uploadify的文件上传操作,免费版本用的是J ...

  8. angularjs 整合bootstrap 时间控件

    一.引入js <link href="${basePath}/static/plugin/bootstrap/css/bootstrap-datetimepicker.min.css& ...

  9. IE11浏览器中的My97日历控件刷新后无法打开问题解决办法

    IE11浏览器中的My97日历控件刷新后无法打开问题解决办法   IE11浏览器中的My97日历控件刷新后无法打开问题解决办法:(谷歌浏览器下正常.IE11失效) 解决办法:1:找到WdatePick ...

随机推荐

  1. NGUI学习随笔

    一.NGUI的直接用法 1.      Attach a Collider:表示为NGUI的某些物体添加碰撞器,如果界面是用NGUI做的,只能这样添加.(注:用Component添加无效). 2.  ...

  2. CF140E New Year Garland (计数问题)

    用$m$种颜色的彩球装点$n$层的圣诞树.圣诞树的第$i$层恰由$a_{i}$个彩球串成一行,且同一层内的相邻彩球颜色不同,同时相邻两层所使用彩球的颜色集合不 同.求有多少种装点方案,答案对$p$取模 ...

  3. tf.truncated_normal和tf.random_normal使用方法的区别

    1.tf.truncated_normal使用方法 tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=No ...

  4. 绘图-CAD-改快捷键

    CAD的快捷键应该在左手边,左手不离开键盘,右手不离开鼠标,这样的操作才有效率. arc 圆弧命令原命令是ARC Q 圆(CIRCLE) C 原快捷键C被定义为COPY,Q的形状类似圆,只是多了一个尾 ...

  5. [jQuery]ajax同步请求在方法内问题

    在函数内写$.ajax() 的成功函数中return 的值,并没有return到外层方法返回至

  6. [Performance] Optimize Paint and Composite for the website

    "Paint" is one of the most preference killer, it can easily cost more than 60fps, and once ...

  7. 命令模式之2 Invoker Vs. Client

    当程序中直接编写下达命令的语句如new Cmd1().execute()时.一般会将调用者与客户类合二为一. 在GUI程序中.下达命令的语句通常包括在底层框架中.或者说底层框架包括了调用者.这时程序猿 ...

  8. UVA 4683 - Find The Number

    uva 4683 这题的意思是给一个集合,最多有12个元素. 找出仅仅能被集合中一个仅且一个数整除的第n个数. (n <= 10^15). 我用容斥原理做的.先把能被每一个数整除的元素个数累加, ...

  9. spark transform系列__sortByKey

    该函数主要功能:通过指定的排序规则与进行排序操作的分区个数,对当前的RDD中的数据集按KEY进行排序,并生成一个SHUFFLEdrdd的实例,这个过程会运行shuffle操作,在运行排序操作前,sor ...

  10. hdu5319 Painter(模拟)

    题目链接:点击打开链接 题目大意:给一个矩形.有两把刷子,一把刷红色,一把刷蓝色,红色的方向是东南,蓝色的方向是西北,红色加蓝色等于绿色,如今已知这面墙当前的状态.求从白墙到这个状态最少刷了多少次. ...