基于AngularJS的拖拽文件上传的实例代码


Posted in Javascript onJuly 15, 2017

随着HTML5的普及,现在大部分浏览器都支持拖拽功能,今天我们要说的就是实现一套拖拽上传的功能(Angularjs+nodejs)。

一、首先前端这款插件是基于AngularJS的,下面我们来看主要代码。

引入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' }">//调整上传后图片顺序
    <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);
   });//监听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));//一个文件上传成功
       });
      })(i)
     }
    }
   };
  }])
})();

二、然后是我们的后台代码:

1、app.js中设定上传文件缓存地址

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 });
  });
 });
};

三、调节图片顺序

加入Sortable插件用来拖拽调整上传图片的先后位置

1、引入js:

<script src="Sortable.min.js"></script>
<script src="ng-sortable.js"></script>

2、html代码:

<div ng-sortable="{ group: 'foobar' }">//调整上传后图片顺序
  <img ng-repeat="file in files" ngf-src="file">
</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript学习笔记(二) js对象
Oct 25 Javascript
JS、DOM和JQuery之间的关系示例分析
Apr 09 Javascript
JavaScript中消除闭包的一般方法介绍
Mar 16 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 Javascript
利用jquery实现下拉框的禁用与启用
Dec 07 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
使用store来优化React组件的方法
Oct 23 Javascript
vue element项目引入icon图标的方法
Jun 06 Javascript
JS将网址url转化为JSON格式的方法
Jul 02 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
Sep 29 Javascript
JavaScript数组及常见操作方法小结
Nov 13 Javascript
Javascript实现时间倒计时效果
Jul 15 #Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 #Javascript
JavaScript实现时间表动态效果
Jul 15 #Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 #Javascript
JavaScript实现三级联动效果
Jul 15 #Javascript
BackBone及其实例探究_动力节点Java学院整理
Jul 14 #Javascript
backbone简介_动力节点Java学院整理
Jul 14 #Javascript
You might like
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
js下弹出窗口的变通
2007/04/18 Javascript
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实现类继承实例
2014/07/04 Python
Python单例模式实例详解
2017/03/01 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python多线程之事件Event的使用详解
2018/04/27 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
自动化职业生涯规划书范文
2014/01/03 职场文书
业务部经理岗位职责
2014/01/04 职场文书
高一数学教学反思
2014/02/07 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
办公室年度工作总结2015
2015/05/21 职场文书