支持Angular4好用的文件上传组件ng2-file-upload

前端之家收集整理的这篇文章主要介绍了支持Angular4好用的文件上传组件ng2-file-upload前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
转载自:http://www.cnblogs.com/gavin-cn/p/7256852.html
在Github上找到了一个支持Angular4好用的文件上传组件 ng2-file-upload,这里简单介绍一下这个库的集成使用方案。

本文基于该组件的1.2.1版。

1. 安装

安装非常简单,只要在项目根路径下运行如下npm命令即可:

npm install@H_502_16@ ng2-file@H_502_16@-upload --save

2. 使用说明@H_502_16@@H_502_16@

官方的文档写的非常简单,几乎看不出什么来,这里结合实际的使用调试,说明一下基本的配置和使用方案。

2.1. 集成到Module中

在需要使用的Module中需要引入如下两个模块:

@H_502_16@
…
import { CommonModule } from @H_502_16@'@angular/common';
import { FileUploadModule } from @H_502_16@'ng2-file-upload';
…
@NgModule({
  …
  imports: [
    …
    CommonModule,FileUploadModule
    …
  ],…
})
export class ProjectDetailPageModule {}@H_502_16@
@H_502_16@

2.2. 初始化FileUploader@H_502_16@@H_502_16@

在对应的使用的Component中,需要引入FileUploader

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

然后声明一个FileUploader类型的变量,并将其初始化:

@H_502_16@
uploader:FileUploader = new@H_502_16@ FileUploader({    
    url: commonConfig.baseUrl @H_502_16@+ "/uploadFile",method: @H_502_16@"POST",itemAlias: @H_502_16@"uploadedfile",autoUpload: @H_502_16@false@H_502_16@
});@H_502_16@
@H_502_16@

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

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

2.2.1. 关键参数说明

  • headers:@H_502_16@这里参数一个Array类型,数组内接收的类型为{name: 'headerName',value: 'haederValue'},例如:
  • @H_404_282@
    @H_502_16@
    this@H_502_16@.uploader = new@H_502_16@ FileUploader({    
      url: commonConfig.baseUrl @H_502_16@+ "/uploadFile",255)">false@H_502_16@,headers:[
        {name:@H_502_16@"x-AuthenticationToken",value:"dd32fdfd32fs23fds9few"}
      ]
    });@H_502_16@
    @H_502_16@
  • autoUpload:@H_502_16@是否自动上传,如果为true,则通过<input type="file"/>选择完文件后立即自动上传,为false则需要手工调用uploader.uploadAll()或者uploader.uploadItem(value: FileItem)方法进行手工上传
  • allowedFileType:@H_502_16@这个文件类型并非我们认为的文件后缀,不管选择哪一个值,并不会过滤弹出文件选择时显示文件类型,只是选择后,非该类型的文件会被过滤掉,例如allowedFileType:["image","xls"],可选值为:

    • application
    • image
    • video
    • audio
    • pdf
    • compress
    • doc
    • xls
    • ppt
    • @H_404_282@
    • allowedMimeType:@H_502_16@这个是通过Mime类型进行过滤,例如allowedMimeType: ['image/jpeg','image/png' ],跟上面的allowedFileType参数一样,不管选择哪一个值,并不会过滤弹出文件选择时显示文件类型,只是选择后,非该类型的文件会被过滤掉。

    • @H_404_282@

      2.3. FileUploader常用事件绑定

      注意基于uploader事件绑定的函数其默认scope为uploader自身,所以如果想在对应的绑定函数中使用其他scope对象,需要使用bind函数处理对应的绑定函数,如下:

      this@H_502_16@.uploader.onSuccessItem = this@H_502_16@.successItem.bind(this@H_502_16@);

      下面介绍三个常用的事件

2.3.1. onAfterAddingFile

onAfterAddingFile(fileItem: FileItem): any;

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

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

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

="selectedFileOnChanged($event)"@H_502_16@ multiple @H_502_16@/>@H_502_16@

2.4.2 支持文件多选的实现示例@H_502_16@@H_502_16@

下面是参考官方示例改造的一个文件多选时的template及相关后台代码的配置示例:@H_502_16@

ion-card@H_502_16@>@H_502_16@ ion-card-header@H_502_16@>@H_502_16@ 文件上传操作 @H_502_16@</@H_502_16@ion-card-content@H_502_16@>@H_502_16@ #fileUpload hidden@H_502_16@=true @H_502_16@/>@H_502_16@ button @H_502_16@(click)@H_502_16@="fileSelect()"@H_502_16@ >@H_502_16@选择文件button@H_502_16@="fileAllUp()"@H_502_16@ >@H_502_16@全部上传="fileAllCancel()"@H_502_16@ >@H_502_16@全部取消="fileAllDelete()"@H_502_16@ >@H_502_16@清除列表>@H_502_16@ >@H_502_16@ 上传文件列表 @H_502_16@p@H_502_16@>@H_502_16@已选文件数量: {{ uploader?.queue?.length }}ion-grid@H_502_16@>@H_502_16@ ion-row@H_502_16@>@H_502_16@ ion-col @H_502_16@col-2@H_502_16@=""@H_502_16@>@H_502_16@名称ion-col@H_502_16@>@H_502_16@保存名>@H_502_16@文件大小>@H_502_16@进度col-1@H_502_16@>@H_502_16@状态col-3@H_502_16@>@H_502_16@操作>@H_502_16@ ion-row @H_502_16@*ngFor@H_502_16@="let item of uploader.queue"@H_502_16@><@H_502_16@strong@H_502_16@>@H_502_16@{{ item?.file?.name }}></@H_502_16@="text"@H_502_16@="changeFileName($event,item)"@H_502_16@>@H_502_16@ span@H_502_16@>@H_502_16@{{ item?.file?.size/1024/1024 | number:'.2' }} MB>@H_502_16@ div @H_502_16@class@H_502_16@="progress"@H_502_16@ style@H_502_16@="margin-bottom: 0; height: 70%; width: 90%"@H_502_16@>@H_502_16@ ="progress-bar"@H_502_16@ style@H_502_16@="margin-bottom: 0; height: 100%; background-color: red"@H_502_16@ role@H_502_16@="progressbar"@H_502_16@ [ngStyle]@H_502_16@="{ 'width': item.progress + '%' }"@H_502_16@div@H_502_16@span @H_502_16@*ngIf@H_502_16@="item.isSuccess"@H_502_16@>@H_502_16@成功="!item.isUploaded"@H_502_16@>@H_502_16@未上传="item.isCancel"@H_502_16@>@H_502_16@取消="item.isError"@H_502_16@>@H_502_16@错误="item.upload()"@H_502_16@ [disabled]@H_502_16@="item.isReady || item.isUploading || item.isSuccess"@H_502_16@>@H_502_16@ 上传 @H_502_16@="item.cancel()"@H_502_16@="!item.isUploading"@H_502_16@>@H_502_16@ 取消 @H_502_16@="item.remove()"@H_502_16@>@H_502_16@ 清除 @H_502_16@>@H_502_16@
@H_502_16@

@H_502_16@
@ViewChild('firstInput',{ read: MdInputDirective })
firstInput: MdInputDirective;
@ViewChild(@H_502_16@'fileUpload')
fileUpload: ElementRef;
…
@H_502_16@false@H_502_16@
});
@H_502_16@this@H_502_16@);
@H_502_16@this@H_502_16@.uploader.onAfterAddingFile = this@H_502_16@.afterAddFile;
@H_502_16@this@H_502_16@.buildItemForm;
…
fileSelect(): any{
  @H_502_16@this@H_502_16@.fileUpload.nativeElement.click();
}
fileAllUp(): any{
  @H_502_16@this@H_502_16@.uploader.uploadAll();
}
fileAllCancel(): any{
  @H_502_16@this@H_502_16@.uploader.cancelAll();
}
fileAllDelete(): any{
  @H_502_16@this@H_502_16@.uploader.clearQueue();
}

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

buildItemForm(fileItem: FileItem,fileItem["realFileName"]);
  }
}

afterAddFile(fileItem: FileItem): any{

}
changeFileName(value: any,fileItem: FileItem){
  fileItem[@H_502_16@"realFileName"] = value.target.value;
}
successItem(item: FileItem,headers: ParsedResponseHeaders):any{
  @H_502_16@ 上传文件成功  @H_502_16@
  if@H_502_16@ (status == 200) {
    @H_502_16@ 上传文件获取服务器返回的数据@H_502_16@
    let tempRes = JSON.parse(response);        
  }@H_502_16@else@H_502_16@ {            
    @H_502_16@ 上传文件获取服务器返回的数据错误        @H_502_16@
  }
  console.info(response@H_502_16@+" for "+item.file.name + " status " + status);
}@H_502_16@
@H_502_16@

2.4.3 文件拖拽上传实现

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

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

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

@H_502_16@
fileOverBase(event) {
    @H_502_16@ 拖拽状态改变的回调函数@H_502_16@
}
fileDropOver(event) {
    @H_502_16@ 文件拖拽完成的回调函数@H_502_16@
}
原文链接:https://www.f2er.com/angularjs/145608.html

猜你在找的Angularjs相关文章