Angular2使用ng2-file-upload上傳文件

Angular2中有兩個比較好用的上傳文件的第三方庫,一個是ng2-file-upload腺毫,一個是ng2-uploader癣疟。ng2-uploader是一個輕便的上傳文件的支持庫,功能較弱潮酒,而ng2-file-upload是一個功能比較全面的上傳文件的支持庫睛挚。這里主要介紹一下ng2-file-upload的使用。

以下以Mac OS操作系統(tǒng)介紹急黎。


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故源。

在對應(yīng)需要使用的組件內(nèi)引用:

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

初始化FileUploader

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

初始化FileUploader需要傳入FileUploaderOptions類型的參數(shù):

| 參數(shù)名 | 參數(shù)類型 | 是否是可選值 | 參數(shù)說明 |
|:---- --:|:--------:|:-------------:|:--------:|
| allowedMimeType | Array<string> | 可選值 | |
| allowedFileType | Array<string> | 可選值 | 允許上傳的文件類型 |
| autoUpload | boolean | 可選值 | 是否自動上傳 |
| isHTML5 | boolean | 可選值 | 是否是HTML5 |
| filters | Array<FilterFunction> | 可選值 | |
| headers | Array<Headers> | 可選值 | 上傳文件的請求頭參數(shù) |
| method | string | 可選值 | 上傳文件的方式 |
| authToken | string | 可選值 | auth驗證的token |
| maxFileSize | number | 可選值 | 最大可上傳文件的大小 |
| queueLimit | number | 可選值 | |
| removeAfterUpload | boolean | 可選值 | 是否在上傳完成后從隊列中移除 |
| url | string | 可選值 | 上傳地址 |
| disableMultipart | boolean | 可選值 | |
| itemAlias | string | 可選值 | 文件標記/別名 |
| authTokenHeader | string | 可選值 | auth驗證token的請求頭 |

2.1 選擇文件

在組件對應(yīng)的HTML模版中設(shè)置input標簽:

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

在組件.ts文件中設(shè)置聲明函數(shù):

selectedFileOnChanged() {
    // 這里是文件選擇完成后的操作處理
}

選擇文件默認支持選擇單個文件污抬,如需支持文件多選,請在標簽中添加multiple屬性绳军,即:

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

拖拽文件默認支持多文件拖拽印机。
對塊級元素進行設(shè)置(這里以div標簽為例):

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

在組件.ts文件中設(shè)置聲明函數(shù):

fileOverBase(event) {
    // 拖拽狀態(tài)改變的回調(diào)函數(shù)
}
fileDropOver(event) {
    // 文件拖拽完成的回調(diào)函數(shù)
}
2.3 文件上傳

FileUploader有個數(shù)組類型的屬性queue,里面是所有拖拽的和選擇的文件删铃,只要操作這個屬性便可以進行文件上傳耳贬。

this.uploader.queue[0].onSuccess = (response, status, headers) => {    
    // 上傳文件成功   
    if (status == 200) {
        // 上傳文件后獲取服務(wù)器返回的數(shù)據(jù)
        let tempRes = JSON.parse(response);        
    }else {            
        // 上傳文件后獲取服務(wù)器返回的數(shù)據(jù)錯誤        
    }
};
this.uploader.queue[0].upload(); // 開始上傳

3. FileUploader詳解

FileUploader是ng2-file-upload最主要的部件,里面包含了所有對文件的處理猎唁。

3.1 屬性詳解
  • isUploading:[boolean] 是否正在上傳文件中咒劲。
  • queue:[array<FileItem>] 已經(jīng)拖拽或選擇的所有文件顷蟆。
  • progress:[number] 所有的上傳文件的整體進度。
  • options:[FileUploaderOptions] 上傳文件的配置信息腐魂,前面已經(jīng)介紹過帐偎。
3.2 方法詳解
  • setOptions(options: FileUploaderOptions): void;
    設(shè)置上傳文件的配置信息。
  • 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 監(jiān)聽詳解
  • onAfterAddingAll(fileItems: any): any;
    添加完所有文件之后的回調(diào)
    返回:
  • fileItems - 添加的文件的數(shù)組
  • onBuildItemForm(fileItem: FileItem, form: any): any;
    創(chuàng)建文件之后的回調(diào)
    返回:
  • fileItem - 創(chuàng)建的文件
  • form - 添加的方式
  • onAfterAddingFile(fileItem: FileItem): any;
    添加一個文件之后的回調(diào)
    返回:
  • fileItem - 添加的文件
  • onWhenAddingFileFailed(item: FileLikeObject, filter: any, options: any): any;
    添加文件失敗的回調(diào)
    返回:
  • item -
  • filter -
  • options -
  • onBeforeUploadItem(fileItem: FileItem): any;
    要上傳文件之前的回調(diào)
    返回:
  • fileItem - 將要上傳的文件
  • onProgressItem(fileItem: FileItem, progress: any): any;
    上傳文件的進度(開始上傳后調(diào)用非常頻繁)
    返回:
  • fileItem - 正在上傳的文件
  • progress - 該文件的上傳進度
  • onProgressAll(progress: any): any;
    整體的上傳進度的回調(diào)(開始上傳后調(diào)用非常頻繁)
    返回:
  • progress - 整體的上傳文件的進度
  • onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    上傳一個文件成功的回調(diào)
    返回:
  • item - 上傳成功的文件
  • response - 上傳成功后服務(wù)器的返回
  • status - 狀態(tài)碼
  • headers - 上傳成功后服務(wù)器的返回的返回頭
  • onErrorItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    上傳一個文件錯誤的回調(diào)
    返回:
  • item - 上傳錯誤的文件
  • response - 返回的錯誤
  • status - 狀態(tài)碼
  • headers - 返回的錯誤返回頭
  • onCancelItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    取消上傳一個文件的回調(diào)
    返回:
  • item - 取消上傳的文件
  • response - 取消的返回信息
  • status - 狀態(tài)碼
  • headers - 取消的返回信息的返回頭
  • onCompleteItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
    完成上傳一個文件的回調(diào)
    返回:
  • item - 上傳成功的文件
  • response - 上傳成功后服務(wù)器的返回
  • status - 狀態(tài)碼
  • headers - 上傳成功后服務(wù)器的返回的返回頭
  • onCompleteAll(): any;
    完成上傳所有文件的回調(diào)

4. FileItem詳解

FileItemFileUploaderqueue屬性的元素類型龟梦,在FileUploader中存儲的文件的基本類型隐锭。

4.1 屬性詳解
  • alias [string] : 上傳的標志/別名。
  • url [string] : 地址计贰。
  • method [string] : 上傳的方法钦睡。
  • headers [any] : 上傳的頭部參數(shù)。
  • withCredentials: [boolean] : 是否使用證書蹦玫。
  • formData [any] : 格式化數(shù)據(jù)赎婚?
  • isReady [boolean] : 是否準備上傳(是否可以上傳)。
  • isUploading [boolean] : 是否正在上傳樱溉。
  • isUploaded [boolean] : 是否已經(jīng)上傳過挣输。
  • isSuccess [boolean] : 是否上傳成功。
  • isCancel [boolean] : 是否取消上傳福贞。
  • isError [boolean] : 是否上傳錯誤撩嚼。
  • progress [number] : 上傳進度。
  • index [number] : 在隊列中的位置挖帘。
4.2 方法詳解
  • upload(): void;
    開始上傳這個文件完丽。
  • cancel(): void;
    取消上傳這個文件。
  • remove(): void;
    將這個文件從上傳隊列中移除拇舀。
4.3 監(jiān)聽詳解
  • onBeforeUpload(): void;
    開始上傳之前的回調(diào)函數(shù)逻族。
  • onBuildForm(form: any): any;
    創(chuàng)建文件的回調(diào)函數(shù)。
    返回:
  • form - 文件來源骄崩。
  • onProgress(progress: number): any;
    上傳文件的進度回調(diào)函數(shù)聘鳞。
    返回:
  • progress - 上傳文件的進度薄辅。
  • onSuccess(response: string, status: number, headers: ParsedResponseHeaders): any;
    上傳文件成功的回調(diào)函數(shù)。
    返回:
  • response - 成功后的回調(diào)數(shù)據(jù)
  • status - 狀態(tài)碼
  • headers - 回調(diào)數(shù)據(jù)的返回頭
  • onError(response: string, status: number, headers: ParsedResponseHeaders): any;
    上傳文件錯誤的回調(diào)函數(shù)抠璃。
  • onCancel(response: string, status: number, headers: ParsedResponseHeaders): any;
    取消上傳的回調(diào)函數(shù)站楚。
  • onComplete(response: string, status: number, headers: ParsedResponseHeaders): any;
    上傳文件完成的回調(diào)函數(shù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搏嗡,一起剝皮案震驚了整個濱河市窿春,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌采盒,老刑警劉巖旧乞,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異磅氨,居然都是意外死亡良蛮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門悍赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人货徙,你說我怎么就攤上這事左权。” “怎么了痴颊?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵赏迟,是天一觀的道長。 經(jīng)常有香客問我蠢棱,道長锌杀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任泻仙,我火速辦了婚禮糕再,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玉转。我一直安慰自己突想,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布究抓。 她就那樣靜靜地躺著猾担,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刺下。 梳的紋絲不亂的頭發(fā)上绑嘹,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音橘茉,去河邊找鬼工腋。 笑死姨丈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的夷蚊。 我是一名探鬼主播构挤,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惕鼓!你這毒婦竟也來了筋现?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤箱歧,失蹤者是張志新(化名)和其女友劉穎矾飞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呀邢,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡洒沦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了价淌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片申眼。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蝉衣,靈堂內(nèi)的尸體忽然破棺而出括尸,到底是詐尸還是另有隱情,我是刑警寧澤病毡,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布濒翻,位于F島的核電站,受9級特大地震影響啦膜,放射性物質(zhì)發(fā)生泄漏有送。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一僧家、第九天 我趴在偏房一處隱蔽的房頂上張望雀摘。 院中可真熱鬧,春花似錦八拱、人聲如沸届宠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豌注。三九已至,卻和暖如春灯萍,著一層夾襖步出監(jiān)牢的瞬間轧铁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工旦棉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齿风,地道東北人药薯。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像救斑,于是被迫代替她去往敵國和親童本。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容