Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kukhariev/ngx-uploadx
Angular Resumable Upload Module
https://github.com/kukhariev/ngx-uploadx
angular chunked-uploads resumable-upload tus uploader uploadx
Last synced: about 2 months ago
JSON representation
Angular Resumable Upload Module
- Host: GitHub
- URL: https://github.com/kukhariev/ngx-uploadx
- Owner: kukhariev
- License: mit
- Created: 2018-01-29T19:17:01.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-04-26T09:48:58.000Z (9 months ago)
- Last Synced: 2024-04-26T10:49:14.085Z (9 months ago)
- Topics: angular, chunked-uploads, resumable-upload, tus, uploader, uploadx
- Language: TypeScript
- Homepage: https://github.com/kukhariev/ngx-uploadx
- Size: 2.88 MB
- Stars: 42
- Watchers: 4
- Forks: 23
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-angular - ngx-uploadx - Angular Resumable Upload Module. (Table of contents / Third Party Components)
- fucking-awesome-angular - ngx-uploadx - Angular Resumable Upload Module. (Table of contents / Third Party Components)
- fucking-awesome-angular - ngx-uploadx - Angular Resumable Upload Module. (Table of contents / Third Party Components)
README
# ngx-uploadx
> Angular Resumable Upload Module
[![tests][tests-image]][tests-url]
[![build][build-image]][build-url]
[![npm version][npm-image]][npm-url]
[![commits since latest release][comm-image]][comm-url]## Key Features
- Pause / Resume / Cancel Uploads
- Retries using exponential back-off strategy
- Chunking## Basic usage
- Add ngx-uploadx module as dependency:
```sh
npm install ngx-uploadx
```- Import UploadxModule:
```ts
//...
import { UploadxModule } from 'ngx-uploadx';@NgModule({
imports: [
UploadxModule,
// ...
});
```- Add `uploadx` directive to the component template and provide the required options:
```ts
// Component code
//...
import { UploadxOptions, UploadState } from 'ngx-uploadx';@Component({
selector: 'app-home',
template: ` `
})
export class AppHomeComponent {
options: UploadxOptions = { endpoint: `[URL]` };
onUpload(state: UploadState) {
console.log(state);
//...
}
}
```> _Please navigate to the [src/app sub-folder](src/app) for more detailed examples._
## Server-side setup
- [node-uploadx](https://github.com/kukhariev/node-uploadx#readme)
## API
### UploadxOptions
- `allowedTypes` Allowed file types (directive only)
- `authorize` Function used to authorize requests [(example)](src/app/on-push/on-push.component.ts)
- `autoUpload` Auto start upload when files added. Default value: `true`
- `storeIncompleteHours` Limit upload lifetime. Default value: `24`
- `chunkSize` Fixed chunk size. If not specified, the optimal size will be automatically adjusted based on the network speed.
If set to `0`, normal unloading will be used instead of chunked- `maxChunkSize` Dynamic chunk size limit
- `concurrency` Set the maximum parallel uploads. Default value: `2`
- `endpoint` URL to create new uploads. Default value: `'/upload'`
- `responseType` Expected server response type
- `headers` Headers to be appended to each HTTP request
- `metadata` Custom metadata to be added to the uploaded files
- `multiple` Allow selecting multiple files. Default value: `true` (directive only)
- `prerequest` Function called before every request [(example)](src/app/service-way/service-way.component.ts)
- `retryConfig` Object to configure retry settings:
- `maxAttempts` Maximum number of retry attempts. Default value: `8`
- `shouldRestartCodes` Upload not exist and will be restarted. Default value: `[404, 410]`
- `authErrorCodes` If one of these codes is received, the request will be repeated with an updated authorization token. Default value: `[401]`
- `shouldRetryCodes` Retryable 4xx status codes. Default value: `[408, 423, 429, 460]`
- `shouldRetry` Overrides the built-in function that determines whether the operation should be retried
- `minDelay` Minimum (initial) retry interval. Default value: `500`
- `maxDelay` Maximum retry interval. Default value: `50_000`
- `onBusyDelay` Delay used between retries for non-error responses with missing range/offset. Default value: `1000`
- `timeout` Time interval after which unfinished requests must be retried
- `keepPartial` Determines whether partial chunks should be kept- `token` Authorization token as a `string` or function returning a `string` or `Promise`
- `uploaderClass` Upload API implementation. Built-in: `UploaderX`(default), `Tus`. More [examples](uploader-examples)
### UploadxModule
Adds directives and provide static method `withConfig` for global configuration [(example)](src/app/app.module.ts).
> :bulb: _No need to import `UploadxModule` if you do not use the `uploadx` or `uploadxDrop` directives in your application._
### Directives
```html
```#### uploadx
File input directive.
selectors: `[uploadx]`, `uploadx`
Properties:
- `@Input() uploadx: UploadxOptions` Set directive options
- `@Input() options: UploadxOptions` Alias for `uploadx` property
- `@Input() control: UploadxControlEvent` Control the uploads
- `@Output() state: EventEmitter` Event emitted on upload state change
#### uploadxDrop
File drop directive.
selector: `uploadxDrop`
> :bulb: _Activates the `.uploadx-drop-active` class on DnD operations._
### UploadxService
- `init(options?: UploadxOptions): Observable`
Initializes service. Returns Observable that emits a new value on progress or status changes.
```ts
// @example:
uploadxOptions: UploadxOptions = {
concurrency: 4,
endpoint: `${environment.api}/upload`,
uploaderClass: Tus
};
ngOnInit() {
this.uploadService.init(this.uploadxOptions)
.subscribe((state: UploadState) => {
console.log(state);
// ...
}
}
```- `connect(options?: UploadxOptions): Observable`
Initializes service. Returns Observable that emits the current queue.
```ts
// @example:
@Component({
template: `
{{item.name}}
`,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class UploadsComponent {
uploads$: Observable;
options: UploadxOptions = {
endpoint: `${environment.api}/upload?uploadType=uploadx`,
headers: { 'ngsw-bypass': 1 }
}
constructor(private uploadService: UploadxService) {
this.uploads$ = this.uploadService.connect(this.options);
}
```- `disconnect(): void`
Terminate all uploads and clears the queue.
- `ngOnDestroy(): void`
Called when the service instance is destroyed. Interrupts all uploads and clears the queue and subscriptions.
> :bulb: _Normally `ngOnDestroy()` is never called because `UploadxService` is an application-wide service,
> and uploading will continue even after the upload component is destroyed._- `handleFiles(files: FileList | File | File[], options = {} as UploadxOptions): void`
```ts
// @example:
onFilesSelected(): void {
this.uploadService.handleFiles(this.fileInput.nativeElement.files);
}
```Creates uploaders for files and adds them to the upload queue.
- `control(event: UploadxControlEvent): void`
Uploads control.
```ts
// @example:
pause(uploadId?: string) {
this.uploadService.control({ action: 'pause', uploadId });
}
setToken(token: string) {
this.uploadService.control({ token });
}
```- `request(config: AjaxRequestConfig): Promise>`
Make HTTP request with `axios` like interface. [(example)](src/app/service-way/service-way.component.ts)
- `state(): UploadState[]`
Returns the current state of uploads.
```ts
// @example:
uploads: UploadState[];
constructor(private uploadService: UploadxService) {
// restore background uploads
this.uploads = this.uploadService.state();
}
```- `queue: Uploader[]`
Uploaders array.
```ts
// @example:
export class UploadComponent {
state: UploadState;
options: UploadxOptions = {
concurrency: 1,
multiple: false,
endpoint: `${environment.api}/upload`,
}
constructor(private uploadService: UploadxService) {
this.state = this.uploadService.queue[0] || {};
}
```- `events: Observable`
Uploads state events.
### DI tokens
- `UPLOADX_FACTORY_OPTIONS`: override default configuration
- `UPLOADX_OPTIONS`: global options
- `UPLOADX_AJAX`: override internal ajax lib
## Demo
Checkout the [Demo App](https://ngx-uploadx.vercel.app/) or run it on your local machine:
- Run script `npm start`
- Navigate to `http://localhost:4200/`## Build
Run `npm run build:pkg` to build the lib.
> _packaged by_ [ng-packagr](https://github.com/dherges/ng-packagr)
## Bugs and Feedback
For bugs, questions and discussions please use the [GitHub Issues](https://github.com/kukhariev/ngx-uploadx/issues).
## Contributing
Pull requests are welcome!\
To contribute, please read [contributing instructions](https://github.com/kukhariev/ngx-uploadx/blob/master/.github/CONTRIBUTING.md#contributing).## License
The MIT License (see the [LICENSE](LICENSE) file for the full text)
[npm-image]: https://img.shields.io/npm/v/ngx-uploadx.svg
[npm-url]: https://www.npmjs.com/package/ngx-uploadx
[tests-image]: https://github.com/kukhariev/ngx-uploadx/actions/workflows/test.yml/badge.svg
[tests-url]: https://github.com/kukhariev/ngx-uploadx/actions/workflows/test.yml
[build-image]: https://github.com/kukhariev/ngx-uploadx/actions/workflows/integration.yml/badge.svg
[build-url]: https://github.com/kukhariev/ngx-uploadx/actions/workflows/integration.yml
[comm-image]: https://img.shields.io/github/commits-since/kukhariev/ngx-uploadx/latest
[comm-url]: https://github.com/kukhariev/ngx-uploadx/releases/latest