基于AngularJS的拖拽上传

随着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代码:

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

最后,源码下载地址审核中……

时间: 2024-10-08 08:33:47

基于AngularJS的拖拽上传的相关文章

基于 jq 实现拖拽上传 APK 文件,js解析 APK 信息

技术栈 jquery 文件上传:jquery.fileupload,github 文档 apk 文件解析:app-info-parser,github 文档 参考:前端解析ipa.apk安装包信息 -- app-info-parser 支持功能 点击或拖拽上传 apk 文件 校验文件类型及文件大小 js 解析 apk 文件信息展示并通过上传接口提交给后端 支持上传过程中取消上传 支持上传成功显示上传信息 支持解析.上传等友好提示 支持从历史记录(所有已上传文件)中选择一个 支持假文件处理,比如

dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术:HTML5的api,作为一名前端的菜鸟,没什么可说的,直接分享自己学习的资料: 关于HTML5 的这些新的特性大家可以到Mozilla的开发者社区MDN https://developer.mozilla.org/zh-CN/ 上查HTML5的资料 还有就是发掘到的比较牛逼的一篇博客:http:/

Nodejs express、html5实现拖拽上传

Nodejs express.html5实现拖拽上传 一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.No

Nodejs express、html5实现拖拽上传(转载)

一.前言 文件上传是一 个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖 拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是 expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.NodeJs基础知识 nodejs简单来说就是一个可

jQuery插件之路(三)——文件上传(支持拖拽上传)

好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下,上传文件的时候需要利用的一些必要的知识. 首先我们要说的就是FileReader对象,这是一个HTML5提出的,专门用来异步的读取用户计算机上文件的对象,这里有详细的介绍.所以如果我们想要使用它,那么首先我们得先创建一个FileReader对象. var fr = new FileReader()

windows客户端开发--使你的输入框具有拖拽上传的功能

今天谈一天windows客户端拖拽上传功能. 其实主要是拖拽功能,上传是自己实现的. DragAcceptFiles 函数 最重要的就是这个函数了,看看作用: Registers whether a window accepts dropped files 原型: VOID DragAcceptFiles( HWND hWnd, BOOL fAccept ); 参数: hWnd Type: HWND The identifier of the window that is registering

File杂谈——拖拽上传前传

在<[File杂谈--初识file控件](http://www.seejs.com/archives/668 "File杂谈--初识file控件")>一文中,我们已经对file控件有了初步的了解,并且对制作一个视觉和体验一致的file控件做了较为详细的说明,今天我们继续了解file控件的更多特性,并延伸出更多. ## 新增属性 在HTML5到来之前,绝大多数情况下使用file控件,我们前端工程师需要的有用信息都只能通过value属性获得的文件名字符串来获取(比如:文件类型.

原生API实现拖拽上传文件实践

功能: 拖拽上传文件.图片,上传的进度条,能够同时上传多个文件. 完整的demo地址:https://github.com/qcer/FE-Components/tree/master/QDrag 涉及到的API: 1.HTML5的拖拽事件:dragenter,dragover,drop等 2.XMLHttpRequest  Level2 3.FormData 4.(扩展:HTML5的File API) 概述: 1.利用拖拽实践的API将一个普通的div自定义成一个放置目标,这里有一个技巧是放置

拖拽上传功能

拖拽上传功能旨在实现拖拽文件或者图片上传到你想要保存到的地方.此处上传的是xml文件,可以在里面对文件类型进行限制: 声明:现在的ie浏览器9及以下的版本并不支持该方法实现拖拽上传,如果有大神可以分享ie9及以下的拖拽上传方法将不胜感激: 代码: <body><div id="div">    <h1 align="center">拖拽上传</h1>    <form   id="form1"