Angular2使用ng2-file-upload上传文件
Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploader。ng2-uploader是一个轻便的上传文件的支持库,功能较弱,而ng2-file-upload是一个功能比较全面的上传文件的支持库。这里主要介绍一下ng2-file-upload的使用。
以下以Mac OS操作系统介绍。
1. 安装
使用npm安装即可。在项目中打开“终端”,运行命令:
sudo npm install ng2-file-upload --save
如果是以systemjs的方式打包,安装完成后需要打开systemjs.config.js文件,在System.config的map字段中的最后一行输入以下字段:
'ng2-file-upload':            'npm:ng2-file-upload'
在System.config的packages字段中的最后一行输入:
'ng2-file-upload': {
    main: 'index.js',
    defaultExtension: 'js'
}
之后便可以在项目中使用了。
2. 使用
在需要用到的模块中引用模块:
import { CommonModule }     from '@angular/common';
import { FileUploadModule } from 'ng2-file-upload';
然后在@NgModule的imports字段中引用CommonModule和FileUploadModule。
在对应需要使用的组件内引用:
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详解
FileItem是FileUploader中queue属性的元素类型,在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上传文件的更多相关文章
- Struts Upload上传文件
		
1.Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.te ...
 - php 下 html5 XHR2 + FormData + File API 上传文件
		
FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...
 - element-ui  upload上传文件并携带参数  使用formData对象
		
需求:上传文件的时候,需要携带其他的参数 问题:使用upload上传文件时,必须使用formData对象,而其他的参数通过data获取的到的,formData和data是不能同时传输的 解决:获取到的 ...
 - thinkphp Upload上传文件在客户端生成的临时文件$_FILES['file']['tmp_name']
		
1.关于thinkphp 的Upload的$_FILES['file']['tmp_name'] 在使用thinkphp上传图片的时候,在上传的$_FILES数组中,有一个$_FILES['file' ...
 - input type file onchange上传文件的过程中,遇到同一个文件二次上传无效的问题。
		
不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...
 - SSH Secure File Transfer上传文件错误:encountered 1 errors during the transfer解决办法
		
在使用SSH 工具向Linux服务器上传文件时,弹出 encountered 1 errors during the transfer 错误. 解决方案: 1.准备上传的那个文件所在目录路径存在(), ...
 - ie8及其以下版本兼容性问题之input file隐藏上传文件
		
文件上传时,默认的file标签很难看,而且每个浏览器下都有很大差距.因此我们基本都把真正的file标签给隐藏,然后创建一个标签来替代它.但是由于IE出于安全方面的考虑上传文件时必须点击file的浏览按 ...
 - input[type='file']获取上传文件路径案例
		
最近在项目时,需要获取用户的上传文件的路径,便写了一个demo: <body> <input type="file" name="" valu ...
 - input type file onchange上传文件的过程中,同一个文件二次上传无效的问题。
		
不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...
 - input type='file'限制上传文件类型
		
前端与后台数据进行对接时,就避免不了要使用ajax进行http请求,常用的请求就两个post与get:然而常见的post请求的需求是文件上传,可能我一说到文件上传大家都觉得so easy啊,没什么嘛 ...
 
随机推荐
- 一:HTML文本编译器 kindeditor-4.1.10 的使用    SpringMVC+jsp的实现
			
一:我用的kindeditor版本是4.1.10 下载完成打开目录结构如下: 二:下面是工程目录也很重要, 三: 好了,准备工作已经做好了,现在就直接上代码了. 首先是页面JSP代码 ...
 - Day3-Python基础3--函数参数及调用
			
一.return返回值 return的两个作用: 1)需要用一个变量来接受程序结束后返回的结果 2)它是作为一个结束符,终止程序运行 def test(): print("我是return前 ...
 - 机器学习:scikit-learn  文档、深入学习机器学习的思路
			
一.scikit-learn 的文档查阅 网页访问 scikit-learn 的文档: scikit-learn.org —— Document —— User Guide: scikit-learn ...
 - java.nio.ByteBuffer中flip、rewind、clear方法的区别
			
对缓冲区的读写操作首先要知道缓冲区的下限.上限和当前位置.下面这些变量的值对Buffer类中的某些操作有着至关重要的作用: limit:所有对Buffer读写操作都会以limit变量的值作为上限. p ...
 - windows下socket编程:区分shutdown()及closesocket()
			
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
 - Vue指令学习
			
# new Vue({ vue所有的数据都是放到data里面的 # data:{ vue对象的数据 # a:1,对象 # b:[] , # } # methods:{vue对象的方法 # dosomt ...
 - javascript——常用函数
			
1.获取随机数: function GetRandomNum(n, m) { //n-m之间的随机数 return Math.floor(Math.random() * (m - n + 1) + n ...
 - 12-21C#电脑蓝屏效果(可以恶搞整人哦)、输入输出流(StreamReader/streamWriter)
			
一.winform电脑蓝屏效果 第一种方法:基本操作: 第一步:创建一个新的C#窗体“Form1”: 第二步:在设计窗口中,更改其属性: 1)text属性:将form1的text属性中的文字取消掉,然 ...
 - 【转载】你知道 Linux 内核是如何构建的吗?
			
内核的根 Makefile 负责构建两个主要的文件:vmlinux (内核镜像可执行文件)和模块文件.内核的 Makefile 从定义如下变量开始: VERSION = PATCHLEVEL = SU ...
 - Swing框架的继承关系
			
---------------siwuxie095 Java SE 8 (截止 2017/4/1 最新)在线 API 文档: http://docs.oracle.com/javase/8/docs/ ...