1. 程式人生 > >【bootstrap-fileinput】前後臺完整示例

【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迴圈只執行了一遍。然後返回結果給頁面,頁面對當前檔案上傳狀態做處理。


相關推薦

bootstrap-fileinput前後臺完整示例

效果圖:HTML:<!-- 引入css檔案 --> <link rel="stylesheet" type="text/css" href="css/fileinput.min.css"/> <!-- 引入js檔案 --> <scri

bootstrap框架各種官方非官方的datepicker預設顯示中文以及指定頁面顯示中文的方法

1、 在datapicker的js檔案中將一下內容進行改變,紅色為增加內容。 var dates= $.fn.datetimepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thurs

Bootstrap 4按鈕

設定按鈕 (.btn-*) 按鈕類可用於<a>,<button>,<input>元素上  <a href="#" class="btn btn-info" role="button">連結按鈕</a> <

Bootstrap 4文字顏色和背景顏色

Table of Contents   文字顏色 背景顏色 文字顏色 <p class="text-muted">柔和的文字</p> <p class="text-primary">重要的文字</p> &l

Bootstrap 4按鈕組

Table of Contents   建立按鈕組(.btn-group)  設定按鈕組大小(.btn-group-lg/.btn-group-sm) 設定按鈕組垂直(.btn-group-vertical) 內嵌按鈕組及下拉選單 拆分按鈕下拉選單 ​

Bootstrap Table在指定列中新增下拉框控制元件,並獲取所選值

背景   最近在使用Bootstrap table ,有一個在某一列新增一個下拉列表,並且通過 “getAllSelections”方法獲取所選行的需求,在實現這個功能的時,走了一些彎路,遇到了一些坑。所以今天總結出來,既是自己的學習,也分享給大家,

TensorFlow實戰2.完整神經網路例子

# coding=utf-8 import tensorflow as tf #NumPy是科學計算工具包,呼叫生成模擬資料集 from numpy.random import RandomState #定義訓練資料batch的大小 batch_size = 8 #定

Bootstrap Tablebootstrap table 常用功能

bootstrap table系列:一、效果展示1、表格行樣式 比如我們有一個顯示訂單頁面的需求,不同狀態的訂單顯示不同的顏色,如圖:2、表格行內編輯第一篇的時候有園友就問過博主是否可以支援行內編輯的效果,答案是肯定的。我們先來看看效果:編輯前點選某個單元格資料編輯後完成後3

第四篇ASP.NET MVC快速入門之完整示例(MVC5+EF6)

redirect name php sql語句 rop 方法 輸入框 一次 編輯 目錄 【第一篇】ASP.NET MVC快速入門之數據庫操作(MVC5+EF6) 【第二篇】ASP.NET MVC快速入門之數據註解(MVC5+EF6) 【第三篇】ASP.NET MVC快速入門

使用Kotlin和RxJava測試MVP架構的完整示例 - 第3部分

原文連結:https://android.jlelse.eu/complete-example-of-testing-mvp-architecture-with-kotlin-and-rxjava-part-3-df4cf3838581 使用假資料和Espresso來建立UI測試 這是

使用Kotlin和RxJava測試MVP架構的完整示例 - 第2部分

原文連結:https://android.jlelse.eu/complete-example-of-testing-mvp-architecture-with-kotlin-and-rxjava-part-2-ca150c688ab1 這是關於測試Kotlin中MVP應用程式每一層的文章

使用Kotlin和RxJava測試MVP架構的完整示例 - 第1部分

原文連結:https://android.jlelse.eu/complete-example-of-testing-mvp-architecture-with-kotlin-and-rxjava-part-1-816e22e71ff4 最近我建立了一個playground專案來了解更多關

RabbitMQspring整合rabbitmq 檔案配置、demo完整示例

之前講了基於java配置的簡單的小demo,現在結合一下spring進行整合。其實原理跟之前差不多的,只是改成了xml的配置。1、建立工廠連線<rabbit:connection-factory id="connectionFactory"

基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構(十五)許可權架構消費者(完整實現)

      在第十四章我們已經完成了通用業務類的編寫,因此本章我們將講解如何完整的實現我們的許可權架構的消費者的實現,首先開啟我們的rbac-consumer工程,接著開啟我們的主入口檔案RbacConsumerApplication.java加入@EnableDiscove

基於springboot+bootstrap+mysql+redis搭建一套完整的許可權架構整合springSecurity

        若需要整合我們的springSecurity,一種是直接使用springSecurity自帶的許可權架構,另外一種是使用我們自己設計的資料架構,本文所闡述的就是使用自己設計的RBAC許可權架構,因此我們要事先設計好使用者許可權架構的PDM如下圖所示,並建立我

bootstrap-fileinput模態框匯入Excel完整示例

import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apac

基於springboot+bootstrap+mysql+redis搭建一套完整的許可權架構構建工程

       在看這一部分文章的時候,你必須要有一定的java基礎,熟悉maven,IDEA開發工具以及瞭解mysql,spring,thymeleaf,bootstrap,若沒有此基礎,請先熟悉ja

BootStrap 布局組件 I

包括 code put school radi 靈活 -- 標簽 上拉 BootStrap布局組件 I   除了在原生的HTML基礎上進行了外觀和類別上的改進,BS還包裝了很多組件進庫中,設計網頁時我們可以方便地調用這些組件。下面來簡略地介紹一下各種各樣的組件 ■

BootStrap 布局組件 II

ssa text 關閉 art 一個 默認樣式 沒有 new 部分 BootStrap 布局組件 II ■  分頁   BS中通過.pagination的ul元素來實現一個分頁集合,一個典型的分頁如下: <ul class="pagination">

Bootstrap一個PC、平板、手機同一時候使用並且美觀的登陸頁面

south 文檔 panel code input fse 使用 start pro Bootstrap如同前臺框架,它已經布置好不少的CSS。前端開發的使用須要則直接調用就可以。其站點的網址就是http://www.bootcss.com。使用Bootstrap能降低