angular-file-upload 一款好用的文件上传组件

演示地址:http://runjs.cn/detail/o4a55204

第一步:引入资源文件,

在 head 标签中引入资源

<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" />
    <link rel="stylesheet" href="pure/pure.css"/>
    <style>
        .upload-wp{position: relative}
        .upload-wp label.upload-agent{width: 225px!important;}
        .upload-wp .upload-button{position:absolute;clip:rect(0 0 0 0);width: 100px; }
    </style>
  <script src="angular-1.6.4/angular.min.js"></script>  <script src="angular-file-upload.js"></script>

  

第二步:构建应用

html 标签上 加指令:ng-app="app"

body 标签上 加指令:ng-controller="AppController"

 <div class="container">
  <div class="pure-g">
    <div class="pure-u-1-1">
        <div class="upload-wp">
            <label for="uploadBtn" class="pure-button pure-button-primary upload-agent" >上传附件 <span style="font-size: .5em">(可以同时选中多个文件)</span></label>
            <input  id="uploadBtn" class="upload-button"type="file" nv-file-select="" uploader="uploader" multiple  />
        </div>
    </div>
    <div class="pure-u-1-1" style="margin-bottom: 40px" >

        <h3>文件队列</h3>
        <p>队列长度: {{ uploader.queue.length }}</p>

        <table class="table">
            <thead>
            <tr>
                <th width="50%">文件名称</th>
                <th ng-show="uploader.isHTML5">大小</th>
                <th ng-show="uploader.isHTML5">进度</th>
                <th>状态</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            <tr ng-repeat="item in uploader.queue">
                <td><strong>{{ item.file.name }}</strong></td>
                <td ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>
                <td ng-show="uploader.isHTML5">
                    <div class="progress" style="margin-bottom: 0;">
                        <div class="progress-bar" role="progressbar" ng-style="{ ‘width‘: item.progress + ‘%‘ }"></div>
                    </div>
                </td>
                <td class="text-center">
                    <span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>
                    <span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>
                    <span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span>
                </td>
                <td nowrap>
                    <button type="button" class="btn btn-success btn-xs" ng-click="item.upload()" ng-disabled="item.isReady || item.isUploading || item.isSuccess">
                        <span class="glyphicon glyphicon-upload"></span> 上传
                    </button>
                    <!--<button type="button" class="btn btn-warning btn-xs" ng-click="item.cancel()" ng-disabled="!item.isUploading">
                        <span class="glyphicon glyphicon-ban-circle"></span> 取消
                    </button>-->
                    <button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()">
                        <span class="glyphicon glyphicon-trash"></span> 删除
                    </button>
                </td>
            </tr>
            </tbody>
        </table>

        <div>
            <div>
                队列总进度:
                <div class="progress" style="">
                    <div class="progress-bar" role="progressbar" ng-style="{ ‘width‘: uploader.progress + ‘%‘ }"></div>
                </div>
            </div>
            <button type="button" class="btn btn-success btn-s" ng-click="uploader.uploadAll()" ng-disabled="!uploader.getNotUploadedItems().length">
                <span class="glyphicon glyphicon-upload"></span> 上传全部
            </button>
            <!--<button type="button" class="btn btn-warning btn-s" ng-click="uploader.cancelAll()" ng-disabled="!uploader.isUploading">-->
            <!--<span class="glyphicon glyphicon-ban-circle"></span> 取消全部-->
            <!--</button>-->
            <button type="button" class="btn btn-danger btn-s" ng-click="uploader.clearQueue()" ng-disabled="!uploader.queue.length">
                <span class="glyphicon glyphicon-trash"></span> 删除全部
            </button>
        </div>

    </div>
</div>

第三步 js回调:

<script>
    ‘use strict‘;
    angular.module(‘app‘, [‘angularFileUpload‘])
            .controller(‘AppController‘, [‘$scope‘, ‘FileUploader‘, function($scope, FileUploader) {

                $scope.attachList=[]; //附件
                var uploader = $scope.uploader = new FileUploader({
                    url: ‘/tianhe/file/uploadFile‘ //请求路径
                });

                // an async filter
                uploader.filters.push({
                    name: ‘asyncFilter‘,
                    fn: function(item /*{File|FileLikeObject}*/, options, deferred) {
                        console.log(‘asyncFilter‘);
                        setTimeout(deferred.resolve, 1e3);
                    }
                });

                // CALLBACKS
                //点击添加附件失败回调
                uploader.onWhenAddingFileFailed = function(item /*{File|FileLikeObject}*/, filter, options) {
                    console.info(‘onWhenAddingFileFailed‘, item, filter, options);
                };                //添加单个附件之后回调
                uploader.onAfterAddingFile = function(fileItem) {
                    console.info(‘onAfterAddingFile‘, fileItem);
                };          //选中多个附件
                uploader.onAfterAddingAll = function(addedFileItems) {
                    console.info(‘onAfterAddingAll‘, addedFileItems);
                };          //上传单个附件
                uploader.onBeforeUploadItem = function(item) {
                    console.info(‘onBeforeUploadItem‘, item);
                };          //上传进度
                uploader.onProgressItem = function(fileItem, progress) {
                    console.info(‘onProgressItem‘, fileItem, progress);
                };          //上传所有附件
                uploader.onProgressAll = function(progress) {
                    console.info(‘onProgressAll‘, progress);
                };         //成功上传附件
                uploader.onSuccessItem = function(fileItem, response, status, headers) {
                    console.info(‘onSuccessItem‘, fileItem, response, status, headers);
                    console.log("----");
                    console.info(‘接口返回值response‘,response);
                    console.log("****")
                    console.info(‘uploader实例队列‘, uploader.queue); //queue包括所有用户add的附件,包括已经已上传和未上传的附件
                    console.log("****");
                    if(response.success){
                        $scope.attachList.push(response.data); //每次上传成功获取附件附属信息
                    }

                };          //上传附件失败
                uploader.onErrorItem = function(fileItem, response, status, headers) {
                    console.info(‘onErrorItem‘, fileItem, response, status, headers);
                };                //取消上传
                uploader.onCancelItem = function(fileItem, response, status, headers) {
                    console.info(‘onCancelItem‘, fileItem, response, status, headers);
                };          //完成单个附件的上传
                uploader.onCompleteItem = function(fileItem, response, status, headers) {
                    console.info(‘onCompleteItem‘, fileItem, response, status, headers);
                };          //上传全部附件后
                uploader.onCompleteAll = function() {
                    console.info(‘onCompleteAll‘);
                };
                //实例uploader对象
                console.info(‘uploader‘, uploader);
            }]);

</script>
时间: 2024-10-13 16:19:21

angular-file-upload 一款好用的文件上传组件的相关文章

JavaScript File API应用——如何设计和实现文件上传组件

(1)精简"带进度条文件上传组件"的设计与实现 XMLHttpRequest第二版为我们提供了便利的progress事件,通过为xhr.upload.onprogress指定处理函数,可以快速制作进度条,JQuery插件参考代码如下: (function($) { $.fn.uploader = function(userOptions) { var options = { id : "uploader", url : "uploadAction.acti

resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现

在git上提供了java.nodejs.c#后台服务方式:在这里我要用c#作为后台服务:地址请见:https://github.com/23/resumable.js 我现在visual studio的环境是2013,mvc4,framwork4.0:我们来看git上给出的c#示例: samples/DotNET/ 在文件中包含两个文件Controllers Models,在两个文件里各有一个文件: 我把他部署到自己项目里边,却没有达到自己预定的效果,我是这样更改的: 一.我先把我的类库项目调成

jQuery File Upload文件上传插件使用

jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示:支持各种动态语言开发的服务器端.官网链接:https://github.com/blueimp/jQuery-File-Upload/wiki 特点:拖放支持:上传进度条:图像预览:可定制和可扩展的:兼容任何服务器端应用平台(PHP, Python, Ruby on Rails, Java, Node.js, Go etc.). 使用方法: 1

input file实现多选,限制文件上传类型,图片上传前预览功能

限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② multiple 属性规定输入字段可选择多个值. 示例: <!-- image/* 所有图片 image/png png图片 image/jpg jpg图片 image/gif gir动图 application/msword Word文档(.doc) application/vnd.openxmlform

页面中使用多个element-ui upload上传组件时绑定对应元素

elemet-ui里提供的upload文件上传组件,功能很强大,能满足单独使用的需求,但是有时候会存在多次复用上传组件的需求,如下图的样子,这时候就出现了问题,页面上有多个上传组件时,要怎么操作呢? 之前在网上找到了一位大神的方法,修改源码,在回调函数中多加一个参数,但是这种方法在多人开发时不太适用,因为这要求所有人都要修改源码,这里附上大神的方法,大家可以酌情使用 首先在你下个包里面找到node_modules/element-ui/lib/element-ui.common.js 然后在里面

jQuery文件上传插件jQuery Upload File 有上传进度条

jQuery文件上传插件jQuery Upload File 有上传进度条 2015年05月15日 jQuery文件上传插件jQuery Upload File,插件使用简单,支持单文件和多文件上传,支持文件拖拽上传,有进度条显示.标准HTML form文件上传,也就是说,只要服务端支持接收multipart/form-data格式数据就能使用此上传插件. 本站web端文件文件提交即使用此插件,效果如下: 浏览器支持 浏览器支持:IE 8.0,IE 9.0,IE 10.0,Firefox,Saf

文件上传file upload

使用fileupload组件实现文件上传: 导入 commons-fileupload-1.2.2.jar commons-io-2.1.jar 官方文档: // Check that we have a file upload request 检测是否有文件上传的请求boolean isMultipart = ServletFileUpload.isMultipartContent(request);/**********************************************

DVWA 黑客攻防实战(五)文件上传漏洞 File Upload

说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映射不到 jsp 文件,同事怀疑是攻击者上传了个 webshell 文件然后进行批量重命名了. 把后台的代码都找了一遍,后台代码也都有验证文件扩展名的,后面是发现一张普通的照片其实是代码来的,但也不知道为何能够执行.但看完这篇文章你就会明白了. 下面用 dvwa 来演示如何攻击和防御. 低级 用户界面

DVWA—File Upload(文件上传)

DVWA文件上传 文件上传是Web是常见的服务 Low: 源代码: basename(path,suffix)函数返回路径中的文件名部分,如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名.可以看到,服务器对上传文件的类型.内容没有做任何的检查.过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息.如果上传成功,则会提示  路径+succesfully uploaded! 如果上传失败,则会提示 Your image was not up