【bootstrap-fileinput】前后台完整示例

效果图:


HTML:

<!-- 引入css文件 -->
<link rel="stylesheet" type="text/css" href="css/fileinput.min.css"/>
<!-- 引入js文件 -->
<script type="text/javascript" src="js/fileinput.min.js"></script>
<script type="text/javascript" src="js/zh.js"></script>

<div class="modal-body">
    <a href="" class="form-control" style="border:none;">下载模板</a>
    <input type="file" name="reportFile" id="reportFile" multiple class="file-loading" />
</div>

JS:

    //初始化fileinput
    var oFileInput = new FileInput();
    //参数1:控件id、参数2:上传地址
    oFileInput.Init("reportFile", "/report/uploadReport"); 
    //初始化fileinput
    var FileInput = function () {
        var oFile = new Object();

        //初始化fileinput控件(第一次初始化)
        oFile.Init = function(ctrlName, uploadUrl) {
            var control = $('#' + ctrlName);

            //初始化上传控件的样式
            control.fileinput({
                language: 'zh',                                         //设置语言
                uploadUrl: uploadUrl,                                   //上传的地址
                allowedFileExtensions: ['jpg', 'gif', 'png', 'pdf'],    //接收的文件后缀
                showUpload: true,                                       //是否显示上传按钮
                showCaption: false,                                     //是否显示标题
                browseClass: "btn btn-primary",                         //按钮样式     
                //dropZoneEnabled: false,                               //是否显示拖拽区域
                //minImageWidth: 50,                                    //图片的最小宽度
                //minImageHeight: 50,                                   //图片的最小高度
                //maxImageWidth: 1000,                                  //图片的最大宽度
                //maxImageHeight: 1000,                                 //图片的最大高度
                //maxFileSize: 0,                                       //单位为kb,如果为0表示不限制文件大小
                //minFileCount: 0,
                maxFileCount: 10,                                       //表示允许同时上传的最大文件个数
                enctype: 'multipart/form-data',
                validateInitialCount:true,
                previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
                msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
                uploadExtraData:function (previewId, index) {           //传参
            	    var data = {
                        "reportGroupId": $('#lbl_groupId').html(),      //此处自定义传参
                    };
                    return data;
                }
            });

            //导入文件上传完成之后的事件
            $("#reportFile").on("fileuploaded", function (event, data, previewId, index) {
                //报告table刷新
                showDataGrid_report($('#lbl_groupId').html());
            });
        }
        return oFile;
    };

JAVA:

    /**
     * 报告上传
     * */
    @RequestMapping(value = "/uploadReport", method = RequestMethod.POST)
    public ApiResponse uploadReport(HttpServletRequest request, HttpServletResponse response) {
        Map<String, Object> result = new HashMap<String, Object>();
        //获取参数
        String reportGroupId = getParam(request, "reportGroupId");
        
        //调用通用接口上传文件
        result = uploadFile(request, "reportFile", reportGroupId);
        
        ApiResponse ret = new ApiResponse();
        ret.setMap(result);
        return ret;
    }    

    /**
     * 上传文件通用接口
     * 
     * @param request           请求体
     * @param dstFileName       html上传组件中(input中name属性),上传文件体名称,通过此名称获取所有上传的文件map
     * @param reportGroupId     (特殊)上传报告所述报告组id
     * */
    protected Map<String, Object> uploadFile(HttpServletRequest request, String dstFileName, String reportGroupId) {
        Map<String, Object> ret = new HashMap<String, Object>();
        
        //判断保存文件的路径是否存在
        File fileUploadPath = new File(FILE_UPLOAD_PATH);
        if (!fileUploadPath.exists()) {
            fileUploadPath.mkdir();
        }
        
        if (ServletFileUpload.isMultipartContent(request)) {
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            List<MultipartFile> fileList = multipartRequest.getFiles(dstFileName);
            for (MultipartFile item : fileList) {
                String fileName = "";        //当前上传文件全名称
                String fileType = "";        //当前上传文件类型
                String saveFileName = "";    //保存到服务器目录的文件名称
                String reportAddr = "";      //保存到服务器目录的文件全路径
                try {
                    fileName = item.getOriginalFilename();
                    fileType = item.getContentType();
                    saveFileName = getCurrentTime("yyyyMMddHHmmss") + "_" + fileName;
                    reportAddr = fileUploadPath + "/" + saveFileName;
                    reportAddr = reportAddr.replace("/", File.separator).replace("\\", File.separator);
                    
                    File savedFile = new File(fileUploadPath, saveFileName);
                    item.transferTo(savedFile);
                   
                    //上传文件成功,保存文件信息到表reportDetail
                    Map<String, Object> param = new HashMap<String, Object>();
                    param.put("reportGroupId", reportGroupId);
                    param.put("reportName", fileName);
                    param.put("reportType", fileType);
                    param.put("reportAddr", reportAddr);
                    param.put("createTime", getCurrentTime("yyyy-MM-dd HH:mm:ss"));
                    param.put("lastOper", "xxxxxxx");
                    ApiResponse r = (ApiResponse) saveEntity("/report/saveReportDetail", param, ApiResponse.class);
                    
                    if (r.getCode() == 0) {
                        ret.put("success", true);
                    } else {
                        ret.put("success", false);
                        ret.put("message", r.getMessage());
                    }
                } catch (Exception e) {
                    logger.error(e.getMessage());
                    ret.put("success", false);
                    ret.put("message", e.getMessage());
                }
            }
        }
        return ret;
    }

PS:后台接收文件时用了for循环,其实bootstrap-fileinput插件在多文件上传时,是采用多次调用'uploadUrl'实现文件上传,所以当前for循环只执行了一遍。然后返回结果给页面,页面对当前文件上传状态做处理。


  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
bootstrap-fileinput是一种基于Bootstrap框架的文件上传插件,它提供了简单易用的界面和丰富的功能。 首先,bootstrap-fileinput具有美观的样式,与Bootstrap的整体风格相匹配。它使用了一系列清晰、直观的图标和按钮,让用户可以方便地浏览、选择和上传文件。 其次,bootstrap-fileinput还支持多种文件展示方式。它可以以列表或网格的形式显示文件预览,在列表模式下可以显示文件的名称、大小、类型等信息,而在网格模式下则可以直观地展示文件的缩略图。这种多样化的展示方式可以让用户根据自己的需求选择最适合的视觉效果。 此外,bootstrap-fileinput还具有丰富的功能。它支持文件的多选和拖拽上传,可以通过设置参数来限制文件的大小、类型和数量等。它还提供了预览、删除和重新选择文件的功能,让用户可以在上传查看文件的内容和清理不需要的文件。此外,它还可以通过AJAX异步上传文件,实现无刷新上传的效果。 最后,bootstrap-fileinput还提供了一些额外的扩展功能。例如,它可以通过设置参数来自定义上传按钮的样式和文本,可以根据不同的需求注册和调用一系列的回调函数,以便实现更加灵活的操作。 总之,bootstrap-fileinput是一个功能强大、界面美观的文件上传插件,它可以为用户提供便捷的文件管理和上传体验。不仅仅可以用于网站开发,也可以用在各种基于Bootstrap框架的Web应用中。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值