前言
該應用主要目的是為了在使用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-fileinput 和 jQuery-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">×</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>