基于AngularJS的拖拽文件上傳的實(shí)例代碼
隨著HTML5的普及,現(xiàn)在大部分瀏覽器都支持拖拽功能,今天我們要說(shuō)的就是實(shí)現(xiàn)一套拖拽上傳的功能(Angularjs+nodejs)。
一、首先前端這款插件是基于AngularJS的,下面我們來(lái)看主要代碼。
引入js:
<script src="js/angular.1.3.15.min.js"></script> <script src="js/ng-file-upload-shim.min.js"></script> <script src="js/ng-file-upload.min.js"></script>
html:
<div class="block__list block__list_words" ng-controller="UploadController">
<div ngf-drop ng-model="files" class="drop-box" ngf-drag-over-class="dragover" ngf-multiple="true" ngf-allow-dir="true" ngf-accept="'.jpg,.png,.pdf,.html,.zip'">//上傳文件的格式
<div class="progressbar" ng-show="showProgress">
<div ng-repeat="file in files" class="uploadInfo">
<div class="fileName col-sm-5 col-xs-6">{{file.name}}</div>
<div class="divProgressbar{{$index}} col-sm-5 col-xs-4"></div>
<div class="col-sm-2 col-xs-2">
<i class="fa fa-trash fontIcon" ng-click="delFile($index)"></i>
</div>
</div>
</div>
<div ng-hide="showProgress">
<div class="import import1">You may also import your own translation</div>
<div class="import import2">memories(TMX)</div>
<div class="import import3">or</div>
</div>
<div class="btn addFiles" ngf-select ng-model="files">
<i class="fa fa-plus-circle"></i>
Add files...
</div>
</div>
<div ngf-no-file-drop>File Drag/Drop is not supported for this browser</div>
Image thumbnail:
<div ng-sortable="{ group: 'foobar' }">//調(diào)整上傳后圖片順序
<img ng-repeat="file in files" ngf-src="file">
</div>
</div>
js:
(function () {
'use strict';
angular.module('todoApp', ['ng-sortable','ngFileUpload'])
.controller('UploadController', ['$scope','Upload', function ($scope,Upload) {
$scope.showProgress = false;
$scope.$watch('files', function () {
$scope.upload($scope.files);
});//監(jiān)聽(tīng)files有改變就上傳
$scope.upload = function (files) {
if (files && files.length) {
for (var i = 0; i < files.length; i++) {
var file = files[i];
(function(i){
return Upload.upload({
url: '/upload',
fields: {'username': $scope.username},
file: file
}).progress(function (evt) {
$scope.showProgress = true;
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);//上傳百分比
console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);
}).success(function (data, status, headers, config) {
$scope.showProgress = true;
var url = data.url;
$scope.files[i].url = url;
console.log('file ' + config.file.name + 'uploaded. Response: ', data);
console.log("size:" + (config.file.size/1000).toFixed(2));//一個(gè)文件上傳成功
});
})(i)
}
}
};
}])
})();
二、然后是我們的后臺(tái)代碼:
1、app.js中設(shè)定上傳文件緩存地址
var multiparty = require('connect-multiparty');
var config = require('./config').config;
app.use(multiparty({
uploadDir: path.join(config.upload_dir)
}));
2、上傳代碼:
exports.uploadImage = function (req, res, next) {
/*if (!req.session || !req.session.user) {
res.send({ status: 'forbidden' });
return;
}*/
var file = req.files && req.files.file;
if (!file) {
res.send({ status: 'failed', message: 'no file' });
return;
}
//var uid = req.session.user._id.toString();
var uid = "stone";
var userDir = path.join(config.upload_dir, uid);
ndir.mkdir(userDir, function (err) {
if (err) {
return next(err);
}
var filename = Date.now() + '_' + file.name;
var savepath = path.resolve(path.join(userDir, filename));
if (savepath.indexOf(path.resolve(userDir)) !== 0) {
return res.send({status: 'forbidden'});
}
fs.rename(file.path, savepath, function (err) {
if (err) {
return next(err);
}
var url = '/upload/' + uid + '/' + encodeURIComponent(filename);
res.send({ status: 'success', url: url });
});
});
};
三、調(diào)節(jié)圖片順序
加入Sortable插件用來(lái)拖拽調(diào)整上傳圖片的先后位置
1、引入js:
<script src="Sortable.min.js"></script> <script src="ng-sortable.js"></script>
2、html代碼:
<div ng-sortable="{ group: 'foobar' }">//調(diào)整上傳后圖片順序
<img ng-repeat="file in files" ngf-src="file">
</div>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Angular4項(xiàng)目中添加i18n國(guó)際化插件ngx-translate的步驟詳解
這篇文章主要跟大家介紹了關(guān)于Angular4項(xiàng)目中添加i18n國(guó)際化插件ngx-translate的步驟,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07
angular6 利用 ngContentOutlet 實(shí)現(xiàn)組件位置交換(重排)
這篇文章主要介紹了angular6 利用 ngContentOutlet 實(shí)現(xiàn)組件位置交換(重排),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Angular Module聲明和獲取重載實(shí)例代碼
這篇文章主要介紹了Angular Module聲明和獲取重載實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09
Angular.js實(shí)現(xiàn)多個(gè)checkbox只能選擇一個(gè)的方法示例
這篇文章主要給大家介紹了利用Angular.js實(shí)現(xiàn)多個(gè)checkbox只能選擇一個(gè)的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,下面來(lái)一起看看吧。2017-02-02
Angular 多模塊項(xiàng)目構(gòu)建過(guò)程
這篇文章主要介紹了Angular 多模塊項(xiàng)目構(gòu)建過(guò)程,本文大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
AngularJS入門(mén)心得之directive和controller通信過(guò)程
Angular JS (Angular.JS) 是一組用來(lái)開(kāi)發(fā)Web頁(yè)面的框架、模板以及數(shù)據(jù)綁定和豐富UI組件,接下來(lái)通過(guò)本文給大家介紹AngularJS入門(mén)心得之directive和controller通信過(guò)程,對(duì)angularjs相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01
Angular依賴(lài)注入optional?constructor?parameters概念
這篇文章主要為大家介紹了Angular?依賴(lài)注入領(lǐng)域里?optional?constructor?parameters?的概念及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Angular.js之作用域scope''@'',''='',''&''實(shí)例詳解
這篇文章主要介紹了Angular.js之作用域scope'@','=','&'實(shí)例詳解,需要的朋友可以參考下2017-02-02
詳解基于Angular4+ server render(服務(wù)端渲染)開(kāi)發(fā)教程
本篇文章主要介紹了詳解基于Angular4+ server render(服務(wù)端渲染)開(kāi)發(fā)教程 ,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08

