ngx-uploadx
Angular Resumable Upload Module

Key Features
- Pause / Resume / Cancel Uploads
- Retries using exponential back-off strategy
- Chunking
Setup
- Add ngx-uploadx module as dependency :
npm install ngx-uploadx
import { UploadxModule } from 'ngx-uploadx';
@NgModule({
imports: [
UploadxModule,
});
Basic usage
import { Observable } from 'rxjs';
import { UploadxOptions, UploadState } from 'ngx-uploadx';
@Component({
selector: 'app-home',
templateUrl: `
<input type="file" [uploadx]="options" (uploadxState)="onUpload($event)">
`
})
export class AppHomeComponent {
options: UploadxOptions = { url: `[URL]`};
onUpload(state: Observable<UploadState>) {
state
.subscribe((item: UploadState) => {
console.log(item);
}
}
Please navigate to the src/app sub-folder for more detailed examples
Server-side setup
Options
-
allowedTypes
: Allowed file types (directive only)
-
autoUpload
: Auto start upload when files added. Default value: true
-
chunkSize
: Set a fixed chunk size. If not specified, the optimal size will be automatically adjusted based on the network speed.
-
concurrency
: Set the maximum parallel uploads. Default value: 2
-
headers
: Headers to be appended to each HTTP request
-
metadata
: Custom uploads metadata
-
uploaderClass
: provide a user-defined class to support another upload protocol or to extend an existing one. Examples : internal and uploader-examples
-
token
: Authorization token as a string
or function returning a string
or Promise<string>
-
endpoint
: URL to create new uploads. Default value: '/upload'
Directive
<input
type="file"
[uploadx]="options"
[uploadxAction]="control"
(uploadxState)="onUpload($event)"
/>
Selector
inputs
-
[uploadx]: UploadxOptions
Set options
-
[uploadxAction]: UploadxControlEvent
Control the uploads status
Output
(uploadxState): ($event: <Observable>UploadState)=> void
UploadxService
-
init(options?: UploadxOptions): Observable<UploadState>
Initializes service. Returns Observable that emits a new value on progress or status changes
uploadxOptions: UploadxOptions = {
concurrency: 4,
endpoint: `${environment.api}/upload`,
token: () => localStorage.getItem('access_token'),
};
ngOnInit() {
this.uploadService.init(this.uploadxOptions)
.subscribe((item: UploadState) => {
console.log(item);
}
}
-
connect(options?: UploadxOptions): Observable<Uploader[]>
Initializes service. Returns Observable that emits the current queue
@Component({
template: `
<input type="file" uploadx">
<div *ngFor="let item of uploads$ | async">{{item.name}}</div>
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class UploadsComponent {
uploads$: Observable<Uploader[]>;
options: UploadxOptions = {
endpoint: `${environment.api}/upload?uploadType=uploadx`,
token: () => localStorage.getItem('access_token'),
}
constructor(private uploadService: UploadxService) {
this.uploads$ = this.uploadService.connect(this.options);
}
-
disconnect(): void
Terminate all uploads and clears the queue
-
handleFile(file: File): void
Create Uploader for the file and add to the queue
-
handleFileList(fileList: FileList): void
Add files to the upload queue
-
control(event: UploadxControlEvent): void
Control the uploads status
pause(uploadId: string) {
this.uploadService.control({ action: 'pause', uploadId });
}
-
queue: Uploader[]
Uploaders array
-
events: Observable<UploadState>
Unloads status events
Run demo
- Start server
npm run server
- Run demo app
npm start
- Navigate to
http://localhost:4200/
Build
Run npm run build
to build the lib.
packaged by ng-packagr
Contributing
Pull requests are welcome!
References
License
The MIT License (see the LICENSE file for the full text)