zoukankan      html  css  js  c++  java
  • Angular2 File Upload

    Angular2 File Upload

    Install

    Install the components

    npm install ng2-file-upload --save

    github:

    https://github.com/valor-software/ng2-file-upload/tree/master

    demo:

    http://valor-software.com/ng2-file-upload/

    demo code

      1     <style>
      2         .my-drop-zone { border: dotted 3px lightgray; }
      3         .nv-file-over { border: dotted 3px red; } /* Default class applied to drop zones on over */
      4         .another-file-over-class { border: dotted 3px green; }
      5      
      6         html, body { height: 100%; }
      7     </style>
      8      
      9     <div class="container">
     10      
     11         <div class="navbar navbar-default">
     12             <div class="navbar-header">
     13                 <a class="navbar-brand" href>Angular2 File Upload</a>
     14             </div>
     15         </div>
     16      
     17         <div class="row">
     18      
     19             <div class="col-md-3">
     20      
     21                 <h3>Select files</h3>
     22      
     23                 <div ng2FileDrop
     24                      [ngClass]="{'nv-file-over': hasBaseDropZoneOver}"
     25                      (fileOver)="fileOverBase($event)"
     26                      [uploader]="uploader"
     27                      class="well my-drop-zone">
     28                     Base drop zone
     29                 </div>
     30      
     31                 <div ng2FileDrop
     32                      [ngClass]="{'another-file-over-class': hasAnotherDropZoneOver}"
     33                      (fileOver)="fileOverAnother($event)"
     34                      [uploader]="uploader"
     35                      class="well my-drop-zone">
     36                     Another drop zone
     37                 </div>
     38      
     39                 Multiple
     40                 <input type="file" ng2FileSelect [uploader]="uploader" multiple  /><br/>
     41      
     42                 Single
     43                 <input type="file" ng2FileSelect [uploader]="uploader" />
     44             </div>
     45      
     46             <div class="col-md-9" style="margin-bottom: 40px">
     47      
     48                 <h3>Upload queue</h3>
     49                 <p>Queue length: {{ uploader?.queue?.length }}</p>
     50      
     51                 <table class="table">
     52                     <thead>
     53                     <tr>
     54                         <th width="50%">Name</th>
     55                         <th>Size</th>
     56                         <th>Progress</th>
     57                         <th>Status</th>
     58                         <th>Actions</th>
     59                     </tr>
     60                     </thead>
     61                     <tbody>
     62                     <tr *ngFor="let item of uploader.queue">
     63                         <td><strong>{{ item?.file?.name }}</strong></td>
     64                         <td *ngIf="uploader.isHTML5" nowrap>{{ item?.file?.size/1024/1024 | number:'.2' }} MB</td>
     65                         <td *ngIf="uploader.isHTML5">
     66                             <div class="progress" style="margin-bottom: 0;">
     67                                 <div class="progress-bar" role="progressbar" [ngStyle]="{ 'width': item.progress + '%' }"></div>
     68                             </div>
     69                         </td>
     70                         <td class="text-center">
     71                             <span *ngIf="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>
     72                             <span *ngIf="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>
     73                             <span *ngIf="item.isError"><i class="glyphicon glyphicon-remove"></i></span>
     74                         </td>
     75                         <td nowrap>
     76                             <button type="button" class="btn btn-success btn-xs"
     77                                     (click)="item.upload()" [disabled]="item.isReady || item.isUploading || item.isSuccess">
     78                                 <span class="glyphicon glyphicon-upload"></span> Upload
     79                             </button>
     80                             <button type="button" class="btn btn-warning btn-xs"
     81                                     (click)="item.cancel()" [disabled]="!item.isUploading">
     82                                 <span class="glyphicon glyphicon-ban-circle"></span> Cancel
     83                             </button>
     84                             <button type="button" class="btn btn-danger btn-xs"
     85                                     (click)="item.remove()">
     86                                 <span class="glyphicon glyphicon-trash"></span> Remove
     87                             </button>
     88                         </td>
     89                     </tr>
     90                     </tbody>
     91                 </table>
     92      
     93                 <div>
     94                     <div>
     95                         Queue progress:
     96                         <div class="progress" style="">
     97                             <div class="progress-bar" role="progressbar" [ngStyle]="{ 'width': uploader.progress + '%' }"></div>
     98                         </div>
     99                     </div>
    100                     <button type="button" class="btn btn-success btn-s"
    101                             (click)="uploader.uploadAll()" [disabled]="!uploader.getNotUploadedItems().length">
    102                         <span class="glyphicon glyphicon-upload"></span> Upload all
    103                     </button>
    104                     <button type="button" class="btn btn-warning btn-s"
    105                             (click)="uploader.cancelAll()" [disabled]="!uploader.isUploading">
    106                         <span class="glyphicon glyphicon-ban-circle"></span> Cancel all
    107                     </button>
    108                     <button type="button" class="btn btn-danger btn-s"
    109                             (click)="uploader.clearQueue()" [disabled]="!uploader.queue.length">
    110                         <span class="glyphicon glyphicon-trash"></span> Remove all
    111                     </button>
    112                 </div>
    113      
    114             </div>
    115      
    116         </div>
    117      
    118     </div>
    markup
     1     import { Component } from '@angular/core';
     2     import { FileUploader } from 'ng2-file-upload';
     3      
     4     // const URL = '/api/';
     5     const URL = 'https://evening-anchorage-3159.herokuapp.com/api/';
     6      
     7     @Component({
     8       selector: 'simple-demo',
     9       templateUrl: './simple-demo.html'
    10     })
    11     export class SimpleDemoComponent {
    12       public uploader:FileUploader = new FileUploader({url: URL});
    13       public hasBaseDropZoneOver:boolean = false;
    14       public hasAnotherDropZoneOver:boolean = false;
    15      
    16       public fileOverBase(e:any):void {
    17         this.hasBaseDropZoneOver = e;
    18       }
    19      
    20       public fileOverAnother(e:any):void {
    21         this.hasAnotherDropZoneOver = e;
    22       }
    23     }
    typescript
        /*eslint-disable*/
        var express = require('express');
        var multer = require('multer');
        var fs = require('fs');
        var app = express();
         
        var DIR = './uploads/';
         
        var upload = multer({dest: DIR});
         
        app.use(function (req, res, next) {
          res.setHeader('Access-Control-Allow-Origin', 'http://valor-software.github.io');
          res.setHeader('Access-Control-Allow-Methods', 'POST');
          res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
          res.setHeader('Access-Control-Allow-Credentials', true);
          next();
        });
         
        app.use(multer({
          dest: DIR,
          rename: function (fieldname, filename) {
            return filename + Date.now();
          },
          onFileUploadStart: function (file) {
            console.log(file.originalname + ' is starting ...');
          },
          onFileUploadComplete: function (file) {
            console.log(file.fieldname + ' uploaded to  ' + file.path);
          }
        }));
         
        app.get('/api', function (req, res) {
          res.end('file catcher example');
        });
         
        app.post('/api', function (req, res) {
          upload(req, res, function (err) {
            if (err) {
              return res.end(err.toString());
            }
         
            res.end('File is uploaded');
          });
        });
         
        var PORT = process.env.PORT || 3000;
         
        app.listen(PORT, function () {
          console.log('Working on port ' + PORT);
        });
    backend demo

    API

    Usage

    import { FileSelectDirective, FileDropDirective, FileUploader } from 'ng2-file-upload/ng2-file-upload';

    Annotations

    // class FileSelectDirective
    @Directive({ selector: '[ng2FileSelect]' })
    // class FileDropDirective
    @Directive({ selector: '[ng2FileDrop]' })

    FileSelect API

    Properties

    • uploader - (FileUploader) - uploader object. 上传对象

      Parameters supported by this object(此对象支持的参数:):

    • url - URL of File Uploader's route(URL网址上传文件的路径)

    • authToken - auth token that will be applied as 'Authorization' header during file send.(认证令牌,将作为“授权”标题在文件发送。)
    • disableMultipart - If 'true', disable using a multipart form for file upload and instead stream the file. Some APIs (e.g. Amazon S3) may expect the file to be streamed rather than sent via a form. Defaults to false.(如果'真',禁止使用文件上传多个文件形式而流。一些API(例如Amazon S3)可能希望文件流,而不是通过表单发送。默认为false。)
  • 相关阅读:
    非常抱歉,全站内容审核中...
    jS代码总结(2)
    timestamp(数据库中的数据类型)
    jS代码总结(1)
    TextWriterTraceListener 和设计时属性支持文件xmta
    validating和validated的区别
    IoC和控制反转
    wince BindingSource
    简单网络传递加密数据
    C#不对称加密
  • 原文地址:https://www.cnblogs.com/wdtzms/p/6766145.html
Copyright © 2011-2022 走看看