SSM框架 基於Bootstrap fileinput 實現文件上傳功能

SSM框架 基於Bootstrap fileinput 實現文件上傳功能

pom.xml文件的配置

想要實現SSM框架實現多文件上傳,必要的jar包必須要在pom.xml文件中引入。如下:

        <!--commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!--commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <!--文件上傳-->

準備一個html頁面

需要準備css和js文件,這個不用多說吧。據說這些引入的順序很重要,我照着官方給的example一個個輸進去。照着我的例子自己修改即可。缺少什麼插件就自己去下載,這裏不再贅述。

    <link href="../../../css/bootstrap4.0/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="../../../css/bootstrap4.0/css/bootstrap.min.css" crossorigin="anonymous">
    <link href="../../../bootstrap-fileinput-master/css/fileinput.css" media="all" rel="stylesheet" type="text/css"/>
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" crossorigin="anonymous">
    <link href="../../../bootstrap-fileinput-master/themes/explorer-fas/theme.css" media="all" rel="stylesheet" type="text/css"/>
<script src="../../../js/jquery/jquery-3.4.1.min.js" ></script>
<script src="../../../js/boostrap4.0/js/bootstrap.js"></script>
<script src="../../../js/assets/js/vendor/popper.min.js"></script>
<script src="../../../js/assets/js/vendor/holder.min.js"></script>
<script src="../../../js/boostrap4.0/js/bootstrap.bundle.js" crossorigin="anonymous"></script>
<script src="../../../bootstrap-fileinput-master/js/plugins/piexif.js" type="text/javascript"></script>
<script src="../../../bootstrap-fileinput-master/js/plugins/sortable.js" type="text/javascript"></script>
<script src="../../../bootstrap-fileinput-master/js/fileinput.js" type="text/javascript"></script>
<script src="../../../bootstrap-fileinput-master/js/locales/zh.js" type="text/javascript"></script>
<script src="../../../bootstrap-fileinput-master/themes/fas/theme.js" type="text/javascript"></script>
<script src="../../../bootstrap-fileinput-master/themes/explorer-fas/theme.js" type="text/javascript"></script>

我們需要給這個上傳控件準備一個div和input標籤,如下。

<div class="file-loading">
    <input id="uploadDocs" name="file" type="file" multiple>
</div>

再加上js代碼,我們可以在這裏配置我們的控件和上傳的url等屬性。

<script>
    $("#uploadDocs").fileinput({
        language:'zh',//中文,如果js文件沒有引入zh.js,這個是不起作用的
        theme: "explorer-fas",//主題樣式,就這個比較不錯,支持響應式。
        uploadUrl: '/hw/uploadDocs',//後臺方法的url
        maxFileSize:0,//單位爲kb,如果爲0表示不限制文件大小
        allowedFileExtensions: ['doc', 'docx'],//允許接收的文件後綴
        browseClass:"btn btn-primary", //按鈕樣式
        maxFileCount:250, //表示允許同時上傳的最大文件個數
        msgFilesTooMany: "選擇上傳的文件數量({n}) 超過允許的最大數值{m}!",
        preferIconicPreview: true,
        previewFileIconSettings: {//預覽文件的圖標
            'doc': '<i class="fas fa-file-word text-primary"></i>',
            'docx': '<i class="fas fa-file-word text-secondary"></i>',
            'pdf': '<i class="fas fa-file-word text-danger"></i>',
            'txt': '<i class="fas fa-file-word text-dark"></i>',
        },
    });
    // 上傳成功回調
    $("#uploadDocs").on("filebatchuploadcomplete", function() {

    });
    // 上傳失敗回調
    $('#uploadDocs').on('fileerror', function(event, data, msg) {

    });
</script>

上面我沒有寫太詳細,比如成功時候的回調函數和失敗的回調函數。

Java後臺的寫法。

Bootstrap fileinput對於後臺方法的返回值要求不那麼嚴格,只要求返回的內容中,如果上傳成功,不要返回有內容的“error”屬性即可,那麼我們就使用@ResponseBody這個註解,來返回一個map即可,後期我們可以在js文件中,對這個返回的json字符串進行一些動作。這裏我就不再詳細的去寫。

    @RequestMapping(value = "/uploadDocs",produces="application/json;charset=utf-8")
    @ResponseBody
    public Map<String,Object> uploadDocs(@RequestParam("file") MultipartFile file){
        Map<String, Object> uploadData = new HashMap<String, Object>();
        String uploadDocsPath = "/Users/apple/IdeaProjects/ssmcreater/src/main/webapp/documents/";
        String fileName = file.getOriginalFilename();
        File dir = new File(uploadDocsPath,fileName);
        if(!dir.exists()){
            dir.mkdirs();
        }
        try {
            file.transferTo(dir);
            uploadData.put("code", 0);
            uploadData.put("msg", "上傳成功");
            uploadData.put("data", "");
        } catch (IOException e) {
            uploadData.put("code", -1);
            uploadData.put("msg", "上傳失敗");
            uploadData.put("data", "");
            uploadData.put("error", "上傳失敗,請檢查網絡連接或聯繫管理員");
        }
        return uploadData;
    }

如上。我們就完成了對Bootstrap fileinput與ssm框架的結合,試驗之後我們可以看到,後臺已經接受到了前臺上傳的文件。前臺也完美的顯示了上傳已經完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章