【應用】在線文件管理


前言

該應用主要目的是為了在使用linux系統的時候,實現手機和電腦之間的文件傳輸。前台界面使用的是angular-filemanager, 后台使用的是Spring MVC, 可以下載該應用的war包, 放到tomcat中使用。程序對angular-filemanager的原始功能進行了精簡, 同時做了一些更改。下面該應用的具體功能:

  • 文件上傳下載(上傳使用的是jquery-upload-file
  • 手機掃碼快速打開網頁
  • 圖片預覽
  • 文本文件在線編輯
  • 文件/文件夾重名
  • 文件/文件夾刪除

下面是該應用的一些截圖
主界面

文件上傳

文件上傳完成

二維碼

手機端

前台

前台使用的是使用angularjs + bootstrap寫的一個在線文件管理系統, 這里是github地址, 后台作者已經給出了php和servlet的實現, 之所以使用Spring MVC重寫后台,主要是為了熟悉一下Spring MVC, 同時精簡了該管理系統的一些功能,因為主要目的是在linux系統下為手機和電腦之間的文件傳輸提供一個中介,當然也可以在windows系統下使用,也可以將該應用作為一個局域網中的一個文件共享系統。下面主要介紹在更改界面時的遇到的一些問題。

Jquery-upload-file

進行文件上傳的插件有很多,比如bootstrap-fileinputjQuery-File-Upload,不過這里使用的是jquery-upload-file,因為感覺比上面兩種更加簡單,下面是一個使用示例:

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>jquery-upload-file demo</title>
    <link href="http://7xqp2l.com1.z0.glb.clouddn.com/uploadfile.css" rel="stylesheet">
    <script src="http://7xqp2l.com1.z0.glb.clouddn.com/jquery-1.11.2.min.js" type="text/javascript"></script>
    <script src="http://7xqp2l.com1.z0.glb.clouddn.com/jquery.uploadfile.js"></script>
    <style type="text/css">
        #content {
            width: 600px;
            margin: 0 auto;

        }
        .ajax-file-upload-filename {
            width: 590px;
        }
    </style>
</head>
<body>
<div id="content">
    <div id="fileuploader">Upload</div>
    <button id="extrabutton" class="ajax-file-upload-green">上傳</button>
</div>

<script>
    $(document).ready(function () {
        var extraObj = $("#fileuploader").uploadFile({
            url: "uploadFile",
            fileName: "file",
            showFileSize: true,
            showDelete: true,
            autoSubmit: false,
            statusBarWidth: 590,
            dragdropWidth: 590,
            dragdropHeight: 200,
            uploadStr: "選擇",
            cancelStr: "取消",
            "abortStr": "終止",
            "deleteStr": "刪除",
            dynamicFormData: function () {
                var data = {"param": ""};
                return data;
            },
            onSuccess: function (files, data, xhr, pd) {
                var obj = eval(data);
                console.log(obj);
            }

        });
        
        $("#extrabutton").click(function()
        {
            extraObj.startUpload();
        });

    });
</script>
</body>
</html>

下面是效果

在線演示(只是界面)
下面說幾個選項:

  • url - 文件上傳地址,相當於<form>action屬性
  • fileName - 文件上傳的name屬性,相當於<input type='file' name='file'>中的name
  • dynamicFormData - 提供動態的表單數據,格式為{"key": "value"}
  • onSuccess - 文件上傳成功的回調函數

更多的選項和參數可以參考官方文檔

Angularjs 集成 jquery-upload-file

我們使用jquery-upload-file插件代替了系統中原來的上傳界面,關於angularjs和jquery插件的整合可以參考Angularjs集成第三方js插件之Uploadify,下面說明如何講angularjs和jquery-upload-file整合

在angularjs中配置jquery-upload-file的directive

 app.directive("jqueryUpload", ["fileNavigator", function (fileNavigator) {
        return {
            require: '?ngModel',
            restrict: 'A',
            link: function ($scope, element, attrs, ngModel) {
                extraObj = $(element).uploadFile({
                    url: "uploadFile",
                    fileName: "file",
                    showFileSize: true,
                    showDelete: true,
                    autoSubmit: false,
                    statusBarWidth: "auto",
                    dragdropWidth: "auto",
                    dragdropHeight: 200,
                    uploadStr: "選擇",
                    cancelStr: "取消",
                    "abortStr": "終止",
                    "deleteStr": "刪除",
                    dynamicFormData: function () {
                        var data = {"path": $scope.fileNavigator.currentPath.join('/')};
                        return data;
                    },
                    onSuccess: function (files, data, xhr, pd) {
                        var obj = eval(data);

                        if (obj.success) {
                            $scope.fileNavigator.refresh();
                        } else {
                            pd.progressDiv.hide();
                            pd.statusbar.append("<span class='ajax-file-upload-error'>ERROR: " + obj.error + "</span>");
                        }
                    }
                });
            }
        };
    }]);

其中 ["fileNavigator", function (fileNavigator)表示將fileNavigator注入進來以便使用。extraObj是預定義的一個全局變量,因為實在沒有搞清楚angularjs的全局變量如何定義使用,所以直接在index.html中定義了該變量

<script type="text/javascript">
    var extraObj;
</script>

使用directive

定義好了directive之后,使用十分簡單,如下所示

<div id="fileuploader" jquery-upload="" >選擇</div>

其中jquery-upload和directive中的jqueryUpload相對應。

Bootstrap 彈出框

bootstrap對彈出框進行了封裝,使用起來十分方便,下面是一個使用示例:

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>bootstrap modal demo</title>
    <link href="http://7xqp2l.com1.z0.glb.clouddn.com/bootstrap-v3.3.4-bootstrap.min.css" rel="stylesheet">
    <script src="http://7xqp2l.com1.z0.glb.clouddn.com/jquery-1.11.2.min.js" type="text/javascript"></script>
    <script src="http://7xqp2l.com1.z0.glb.clouddn.com/bootstrap-v3.3.4-bootstrap.min.js"></script>
</head>
<body>

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">通過data-target打開彈窗</button>
<button class="btn btn-primary btn-lg" onclick="openDialog();">通過js打開彈窗</button>

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title" id="myModalLabel">標題</h4>
            </div>
            <div class="modal-body">這里是內容</div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">關閉</button>
                <button type="button" class="btn btn-primary">提交</button>
            </div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal -->
</div>

<script type="text/javascript">
    function openDialog() {
        $('#myModal').modal();
    }

</script>
</body>
</html>

有兩種方式可以操作彈窗

  • 指定data-target屬性
  • 使用javascript控制

上面代碼演示了這兩種方式,在線演示

Jquery生成二維碼

二維碼生成插件使用的jquery-qrcode,這里是github地址,下面是一個示例代碼

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>jquery 二維碼生成插件</title>
    <script src="http://7xqp2l.com1.z0.glb.clouddn.com/jquery-1.11.2.min.js" type="text/javascript"></script>
    <script src="http://7xqp2l.com1.z0.glb.clouddn.com/jquery.qrcode.min.js"></script>

    <style type="text/css">
        #qrcode1{
            float: left;
            margin-right: 20px;
        }

        #qrcode2{
            float: left;
        }
    </style>
</head>
<body>

<div id="qrcode1"></div>
<div id="qrcode2"></div>

<script type="text/javascript">
    $('#qrcode1').qrcode("http://zhangjikai.com");
    $('#qrcode2').qrcode({width: 128,height: 128,text: "http://zhangjikai.com"});
</script>
</body>
</html>

Jquery 動態操作DOM元素

下面是一個示例

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>jquery-upload-file demo</title>
    <script src="http://7xqp2l.com1.z0.glb.clouddn.com/jquery-1.11.2.min.js" type="text/javascript"></script>
    <style type="text/css">
        #content {
            width: 600px;
            margin: 0 auto;
        }

        .red_color{
            color: red;
        }
    </style>
</head>
<body>
<div id="content"></div>

<script>
    var content = $("#content");
    $("<h1 />", {
        "text":"Hello World",
        "class" : "red_color"
    }).appendTo(content);

    var ulObj = $("<ul />",{
        "id" : "ulObj"
    }).appendTo(content);

    for(var i = 0; i < 4; i++) {
        $("<li />", {
            "text" : "這是項目" + i
        }).appendTo(ulObj);
    }

    var btnObj = $("<button />", {
        "text" : "點我刪除列表",
        "id" : "btnObj"
    }).appendTo(content);

    $("#btnObj").click(function(e) {
        $("#ulObj").remove();
    })


</script>
</body>
</html>

在線演示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM