一、控件下载: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. 【转载】springboot注解

    https://blog.csdn.net/yitian_66/article/details/80866571 springboot注解:@Service: 注解在类上,表示这是一个业务层bean@ ...

  2. Vue学习之路第十二篇:为页面元素设置内联样式

    1.有了上一篇的基础,接下来理解内联样式的设置会更简单一点,先看正常的css内联样式: <dvi id="app"> <p style="font-si ...

  3. 一、简介 ELO商户类别推荐有助于了解客户忠诚度

    Elo Merchant Category Recommendation Help understand customer loyalty (ELO商户类别推荐有助于了解客户忠诚度) 竞赛描述: 想象 ...

  4. Linux 基础入门一

    操作系统1.简介OS: Operating System,通用目的的软件程序操作系统的内核(kernel):  操作系统其实也是一组程序.这组程序的重点在于管理计算机的所有活动及驱动系统中的所有硬件: ...

  5. Problem 7

    Problem 7 # Problem_7.py """ By listing the first six prime numbers: 2, 3, 5, 7, 11, ...

  6. Centos6.5安装Seafile,遇到的问题处理记录。

    问题1:启动Seafile安装脚本时,提示找不到MySQL-python模块,使用yum安装成功也提示未安装该软件包 问题1解决方法:需要通过 python 的工具pip来安装MySQL-python ...

  7. VR开发2015年终总结

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50617605 作者:car ...

  8. idea进入列选择模式

    shift + alt + insert 快捷键进入或退出列选择模式 进入列选择模式可以以列坐标选择一列或者多列

  9. 沃通SSL精灵,让站点HTTPS永只是期

    告别HTTP明文"裸奔"时代 百度.阿里巴巴.必应等越来越多的互联网巨头相继启用全站HTTPS加密,保护用户数据和隐私安全.逐步告别HTTP明文"裸奔"时代. ...

  10. Apache Pig的前世今生

    近期,散仙用了几周的Pig来处理分析我们站点搜索的日志数据,感觉用起来非常不错,今天就写篇笔记介绍下Pig的由来,除了搞大数据的人,可能非常少有人知道Pig是干啥的.包含一些是搞编程的,但不是搞大数据 ...