Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploaderng2-uploader是一个轻便的上传文件的支持库,功能较弱,而ng2-file-upload是一个功能比较全面的上传文件的支持库。这里主要介绍一下ng2-file-upload的使用。

以下以Mac OS操作系统介绍。


1. 安装

使用npm安装即可。在项目中打开“终端”,运行命令:

sudo npm install ng2-file-upload --save

如果是以systemjs的方式打包,安装完成后需要打开systemjs.config.js文件,在System.configmap字段中的最后一行输入以下字段:

'ng2-file-upload':            'npm:ng2-file-upload'

System.configpackages字段中的最后一行输入:

'ng2-file-upload': {
main: 'index.js',
defaultExtension: 'js'
}

之后便可以在项目中使用了。


2. 使用

在需要用到的模块中引用模块:

import { CommonModule }     from '@angular/common';
import { FileUploadModule } from 'ng2-file-upload';

然后在@NgModuleimports字段中引用CommonModuleFileUploadModule

在对应需要使用的组件内引用:

import { FileUploader } from 'ng2-file-upload';

初始化FileUploader

uploader:FileUploader = new FileUploader({
url: "http://www.download.com:80/uploadFile",
method: "POST",
itemAlias: "uploadedfile"
});

初始化FileUploader需要传入FileUploaderOptions类型的参数:

| 参数名 | 参数类型 | 是否是可选值 | 参数说明 |
|:---- --:|:--------:|:-------------:|:--------:|
| allowedMimeType | Array<string> | 可选值 | |
| allowedFileType | Array<string> | 可选值 | 允许上传的文件类型 |
| autoUpload | boolean | 可选值 | 是否自动上传 |
| isHTML5 | boolean | 可选值 | 是否是HTML5 |
| filters | Array<FilterFunction> | 可选值 | |
| headers | Array<Headers> | 可选值 | 上传文件的请求头参数 |
| method | string | 可选值 | 上传文件的方式 |
| authToken | string | 可选值 | auth验证的token |
| maxFileSize | number | 可选值 | 最大可上传文件的大小 |
| queueLimit | number | 可选值 | |
| removeAfterUpload | boolean | 可选值 | 是否在上传完成后从队列中移除 |
| url | string | 可选值 | 上传地址 |
| disableMultipart | boolean | 可选值 | |
| itemAlias | string | 可选值 | 文件标记/别名 |
| authTokenHeader | string | 可选值 | auth验证token的请求头 |

2.1 选择文件

在组件对应的HTML模版中设置input标签:

<input type="file" ng2FileSelect [uploader]="uploader" (change)="selectedFileOnChanged($event)" />

在组件.ts文件中设置声明函数:

selectedFileOnChanged() {
// 这里是文件选择完成后的操作处理
}

选择文件默认支持选择单个文件,如需支持文件多选,请在标签中添加multiple属性,即:

<input type="file" ng2FileSelect [uploader]="uploader" (change)="selectedFileOnChanged($event)" multiple />
2.2 拖拽文件

拖拽文件默认支持多文件拖拽。
对块级元素进行设置(这里以div标签为例):

<div class="beforeDrop" ng2FileDrop [ngClass]="{dropping: isDropZoneOver}" (fileOver)="fileOverBase($event)" (onFileDrop)="fileDropOver($event)" [uploader]="uploader"><div>

在组件.ts文件中设置声明函数:

fileOverBase(event) {
// 拖拽状态改变的回调函数
}
fileDropOver(event) {
// 文件拖拽完成的回调函数
}
2.3 文件上传

FileUploader有个数组类型的属性queue,里面是所有拖拽的和选择的文件,只要操作这个属性便可以进行文件上传。

this.uploader.queue[0].onSuccess = (response, status, headers) => {
// 上传文件成功
if (status == 200) {
// 上传文件后获取服务器返回的数据
let tempRes = JSON.parse(response);
}else {
// 上传文件后获取服务器返回的数据错误
}
};
this.uploader.queue[0].upload(); // 开始上传

3. FileUploader详解

FileUploader是ng2-file-upload最主要的部件,里面包含了所有对文件的处理。

3.1 属性详解
  • isUploading:[boolean] 是否正在上传文件中。
  • queue:[array<FileItem>] 已经拖拽或选择的所有文件。
  • progress:[number] 所有的上传文件的整体进度。
  • options:[FileUploaderOptions] 上传文件的配置信息,前面已经介绍过。
3.2 方法详解
  • setOptions(options: FileUploaderOptions): void;
    设置上传文件的配置信息。
  • addToQueue(files: File[], options?: FileUploaderOptions, filters?: FilterFunction[] | string): void;
    手动添加文件到FileUploader的上传队列中。
  • removeFromQueue(value: FileItem): void;
    FileUploader的上传队列中移除指定文件。
  • clearQueue(): void;
    清除FileUploader上传队列中的所有文件。
  • uploadItem(value: FileItem): void;
    上传指定文件。
  • cancelItem(value: FileItem): void;
    取消指定文件的上传。
  • uploadAll(): void;
    上传FileUploader的上传队列中的所有文件。
  • cancelAll(): void;
    取消FileUploader的上传队列中的所有文件的上传。
  • isFile(value: any): boolean;
    判断是否是文件。
  • getIndexOfItem(value: any): number;
    获取文件在FileUploader上传队列中的位置。
  • getNotUploadedItems(): Array<any>;
    获取FileUploader上传队列中的所有未上传的文件。
  • getReadyItems(): Array<any>;
    获取FileUploader上传队列中的所有准备上传的文件。
  • destroy(): void;
    销毁FileUploader实例。
3.3 监听详解
  • onAfterAddingAll(fileItems: any): any;
    添加完所有文件之后的回调
    返回:
  • fileItems - 添加的文件的数组
  • onBuildItemForm(fileItem: FileItem, form: any): any;
    创建文件之后的回调
    返回:
  • fileItem - 创建的文件
  • form - 添加的方式
  • onAfterAddingFile(fileItem: FileItem): any;
    添加一个文件之后的回调
    返回:
  • fileItem - 添加的文件
  • onWhenAddingFileFailed(item: FileLikeObject, filter: any, options: any): any;
    添加文件失败的回调
    返回:
  • item -
  • filter -
  • options -
  • onBeforeUploadItem(fileItem: FileItem): any;
    要上传文件之前的回调
    返回:
  • fileItem - 将要上传的文件
  • onProgressItem(fileItem: FileItem, progress: any): any;
    上传文件的进度(开始上传后调用非常频繁)
    返回:
  • fileItem - 正在上传的文件
  • progress - 该文件的上传进度
  • onProgressAll(progress: any): any;
    整体的上传进度的回调(开始上传后调用非常频繁)
    返回:
  • progress - 整体的上传文件的进度
  • onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    上传一个文件成功的回调
    返回:
  • item - 上传成功的文件
  • response - 上传成功后服务器的返回
  • status - 状态码
  • headers - 上传成功后服务器的返回的返回头
  • onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    上传一个文件错误的回调
    返回:
  • item - 上传错误的文件
  • response - 返回的错误
  • status - 状态码
  • headers - 返回的错误返回头
  • onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    取消上传一个文件的回调
    返回:
  • item - 取消上传的文件
  • response - 取消的返回信息
  • status - 状态码
  • headers - 取消的返回信息的返回头
  • onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    完成上传一个文件的回调
    返回:
  • item - 上传成功的文件
  • response - 上传成功后服务器的返回
  • status - 状态码
  • headers - 上传成功后服务器的返回的返回头
  • onCompleteAll(): any;
    完成上传所有文件的回调

4. FileItem详解

FileItemFileUploaderqueue属性的元素类型,在FileUploader中存储的文件的基本类型。

4.1 属性详解
  • alias [string] : 上传的标志/别名。
  • url [string] : 地址。
  • method [string] : 上传的方法。
  • headers [any] : 上传的头部参数。
  • withCredentials: [boolean] : 是否使用证书。
  • formData [any] : 格式化数据?
  • isReady [boolean] : 是否准备上传(是否可以上传)。
  • isUploading [boolean] : 是否正在上传。
  • isUploaded [boolean] : 是否已经上传过。
  • isSuccess [boolean] : 是否上传成功。
  • isCancel [boolean] : 是否取消上传。
  • isError [boolean] : 是否上传错误。
  • progress [number] : 上传进度。
  • index [number] : 在队列中的位置。
4.2 方法详解
  • upload(): void;
    开始上传这个文件。
  • cancel(): void;
    取消上传这个文件。
  • remove(): void;
    将这个文件从上传队列中移除。
4.3 监听详解
  • onBeforeUpload(): void;
    开始上传之前的回调函数。
  • onBuildForm(form: any): any;
    创建文件的回调函数。
    返回:
  • form - 文件来源。
  • onProgress(progress: number): any;
    上传文件的进度回调函数。
    返回:
  • progress - 上传文件的进度。
  • onSuccess(response: string, status: number, headers: ParsedResponseHeaders): any;
    上传文件成功的回调函数。
    返回:
  • response - 成功后的回调数据
  • status - 状态码
  • headers - 回调数据的返回头
  • onError(response: string, status: number, headers: ParsedResponseHeaders): any;
    上传文件错误的回调函数。
  • onCancel(response: string, status: number, headers: ParsedResponseHeaders): any;
    取消上传的回调函数。
  • onComplete(response: string, status: number, headers: ParsedResponseHeaders): any;
    上传文件完成的回调函数。

作者:Shmily落墨
链接:https://www.jianshu.com/p/0741186f60ab
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Angular2使用ng2-file-upload上传文件的更多相关文章

  1. Struts Upload上传文件

    1.Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.te ...

  2. php 下 html5 XHR2 + FormData + File API 上传文件

    FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...

  3. element-ui upload上传文件并携带参数 使用formData对象

    需求:上传文件的时候,需要携带其他的参数 问题:使用upload上传文件时,必须使用formData对象,而其他的参数通过data获取的到的,formData和data是不能同时传输的 解决:获取到的 ...

  4. thinkphp Upload上传文件在客户端生成的临时文件$_FILES['file']['tmp_name']

    1.关于thinkphp 的Upload的$_FILES['file']['tmp_name'] 在使用thinkphp上传图片的时候,在上传的$_FILES数组中,有一个$_FILES['file' ...

  5. input type file onchange上传文件的过程中,遇到同一个文件二次上传无效的问题。

    不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...

  6. SSH Secure File Transfer上传文件错误:encountered 1 errors during the transfer解决办法

    在使用SSH 工具向Linux服务器上传文件时,弹出 encountered 1 errors during the transfer 错误. 解决方案: 1.准备上传的那个文件所在目录路径存在(), ...

  7. ie8及其以下版本兼容性问题之input file隐藏上传文件

    文件上传时,默认的file标签很难看,而且每个浏览器下都有很大差距.因此我们基本都把真正的file标签给隐藏,然后创建一个标签来替代它.但是由于IE出于安全方面的考虑上传文件时必须点击file的浏览按 ...

  8. input[type='file']获取上传文件路径案例

    最近在项目时,需要获取用户的上传文件的路径,便写了一个demo: <body> <input type="file" name="" valu ...

  9. input type file onchange上传文件的过程中,同一个文件二次上传无效的问题。

    不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...

  10. input type='file'限制上传文件类型

    前端与后台数据进行对接时,就避免不了要使用ajax进行http请求,常用的请求就两个post与get:然而常见的post请求的需求是文件上传,可能我一说到文件上传大家都觉得so  easy啊,没什么嘛 ...

随机推荐

  1. 在Mac系统下使用自己安装的PHP

    今天在安装单元测试框架PHPUnit,需要PHP的最低版本是5.6,由于我的MacBook自带的PHP版本是5.5.36,不能满足安装条件. 看了一下这个网址:https://php-osx.liip ...

  2. JSF使用HTML5的custom attribute

    只需要在页面引用这样的命名空间: xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"之后,在JSF的控件的html5属性加上前缀&quo ...

  3. Swing编程练习。可能这篇会有错误哦

    总结:21岁的思思是华为的初级女java工程师,我等女流怎么办呢? Swing.图形用户界面的编程,panel起了很大作用 package com.da; import java.awt.Color; ...

  4. IDEA编译器如何去掉注释中参数错误的提示

    在使用idea的导入别人的项目的时候经常会在方法注释中出现参数错误的提示,这时我们可以参考下面的配置,将方法注释中的参数错误的提示,更新为警告提示~~ 具体使用方法,参考下图~

  5. SpringMVC—对Ajax的处理(含 JSON 类型)(2)

    这里编写了一个通用的类型转换器: 用来转换形如: firstName=jack&lastName=lily&gender=1&foods=Steak&foods=Piz ...

  6. 类型:.net;问题:iis注册;结果:.net4.0注册到IIS ,重新注册IIS ,iis注册

    .net4.0注册到IIS ,重新注册IIS ,iis注册   IIS和.netfw4.0安装顺序是从前到后,如果不小心颠倒了,无所谓. 打开程序-运行-cmd:输入一下命令重新注册IIS C:\WI ...

  7. Shell编程进阶 1.8 for循环

    产生序列的命令 seq 1 2 3 4 5 6 7 8 9 10 seq 1 3 5 7 9  (从1开始增加2显示这个数字,到10结束) seq - 10 8 6 4 2 seq - 10 9 8 ...

  8. DevTools in Spring Boot 1.3

    Spring Boot 1.3 will ship with a brand new module called spring-boot-devtools. The aim of this modul ...

  9. 支撑矢量机SVM

    1.线性SVM 首先,回顾一下SVM问题的定义,如下: 线性约束很烦,不方便优化,是否有一种方法可以将线性约束放到优化问题本身,这样就可以无拘无束的优化,而不用考虑线性约束了.其对应的拉格朗日对偶形式 ...

  10. rm 删除文件或目录

    rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变. 注意:使用rm命令要格外小心.因为一旦 ...