bootstrap fileinput控件 + django后台上传、回显简单使用

一、控件下载: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 两个事件配合完成的。有知道的道友希望能告知下,万分感谢。。

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

原文地址:https://www.cnblogs.com/gechenguang/p/10417439.html

时间: 2024-08-29 00:41:05

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

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

一.jsp页面 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ page buffer="16kb"%> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme()+":

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

我在较早之前的随笔<基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用>Web框架介绍中介绍了基于Uploadify的文件上传操作,免费版本用的是Jquery+Flash实现文件的上传处理,HTML5收费版本的没有试过.随着Flash逐渐退出整个环境,很多浏览器都可能不再支持Flash的了,因此在更新原有EasyUI整个框架的时候,我们对框架全面进行了完善,包括替换了这个Uploadify的文件上传模块,使用EasyUI内置的FileBox控件,结合Jq

Webbrowser控件判断网页加载完毕的简单方法

一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕.但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕.从微软的官方网站上了解到,并非每个frame都对应了一个DocumentCompleted事件,只有触发了DownloadBegin事件的frame才会有相应的DocumentCompleted事件.另外,最外层的frame总是最

Webbrowser控件判断网页加载完毕的简单方法 (转)

摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕.但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕. 从微软的官方网站上了解到,并非每个frame都对应了一个DocumentCompleted事件,只有触发了Down

bootstrap 日期控件常用选项

使用bootstrap作为UI基础之后,为了尽可能的保持系统风格的一致性,通常我们不太会考虑再引入My97DatePicker作为日期控件. 作为潜在实现的选择之一,http://www.bootcss.com/p/bootstrap-datetimepicker/是比较好的实现,其提供的功能还是强大的.从实用角度来说,包含时间部分和不包含时间部分的场景都很多. 典型的用法通常包括: 1.初始化包含日期,YYYY-MM-DD格式,不需要时间部分. <div class='input-group

在asp.net mvc4项目里bootstrap datetimepicker控件的使用

前段时间写了一篇关于调用阿里大于的短信接口来开发例会短信群发通知功能的文章http://www.cnblogs.com/zhouyuangan/p/apicall_1.html,其中的例会时间是需求中的重中之重,它需要满足“格式化”,“易输入”这两点,对短信费用关心的开发者要知道长短信是两条短信费用之和,因此,例会时间不能随意交给用户自定义输入:要考虑到“易输入”这点,只能选择日期选择控件来辅助用户输入,由于日期选择控件较为小巧使用,在页面中引入并不是难事.在本篇文章中,使用的是bootstra

bootstrap 时间控件

最近使用了bootstrap的UI感觉确实很漂亮,非常值得学习和使用.下面先简单了解下bootstrap的时间控件. 这个时间控件使用起来还是非常的简单,只需要引入基本的css和js就可以了 需要引入的css和js:(文件引入路径根据自己的项目而定) <link href="<c:url value='/plugins/bootstrap-datetimepicker/css/datetimepicker.css'/>" rel="stylesheet&qu

基于avalon+jquery做的bootstrap分页控件

刚开始学习avalon,项目需要就尝试写了个分页控件Pager.js:基于BootStrap样式这个大家都很熟悉 在这里推荐下国产前端神器avalon:确实好用,帮我解决了很多前端问题. 不多说了,代码贴上: 1 /** 2 * options.id avalon 所需要的$id 3 * options.total 总记录数 4 * options.rows 行数 5 * options.callback 6 */ 7 var Pager=function(options){ 8 var _th

.Net neatupload上传控件实现文件上传的进度条

1. 引入bin文件 (可以到neatupload官网下载,也可以到教育厅申报系统中找) 2. 将控件加入到工具栏,在工具栏中点鼠标右键,如图: 3. 加入neatuplaod这个文件夹(可以到neatupload官网下载,也可以到教育厅申报系统中找) 4. Webconfig的配置(3个地方) <configSections>配置节下配置: <!--配置NeatUpload sectionGroup配置节--> <sectionGroup name="system