angular-uploader
v8.41.1
Published
Angular File Upload UI Widget β Lightweight & supports: drag and drop, multiple uploads, image cropping, customization & more π Comes with Cloud Storage π
Downloads
10,787
Maintainers
Readme
Installation
Install via NPM:
npm install angular-uploader uploader
Or via YARN:
yarn add angular-uploader uploader
Initialization
Add the UploaderModule
to your app:
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { UploaderModule } from "angular-uploader";
import { AppComponent } from "./app.component";
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
UploaderModule // <-- Add the Uploader module here.
],
bootstrap: [AppComponent]
})
export class AppModule {}
Components & Directives
Choose one of these options:
Option 1: Create an Upload Button β Try on StackBlitz
The uploadButton
directive displays a file upload modal on click.
Inputs:
uploader
(required): an instance of theUploader
class.uploadOptions
(optional): an object following theUploadWidgetConfig
interface.uploadComplete
(optional): a callback containing a single parameter β an array of uploaded files.
import { Component } from '@angular/core';
import { Uploader, UploadWidgetConfig, UploadWidgetResult } from 'uploader';
@Component({
selector: 'app-root',
template: `
<a href="{{ uploadedFileUrl }}" target="_blank">{{ uploadedFileUrl }}</a>
<button
uploadButton
[uploadComplete]="onComplete"
[uploadOptions]="options"
[uploader]="uploader"
>
Upload a file...
</button>
`,
})
export class AppComponent {
uploader = Uploader({
apiKey: 'free', // <-- Get production-ready API keys from Bytescale
});
options: UploadWidgetConfig = {
multi: false,
};
onComplete = (files: UploadWidgetResult[]) => {
this.uploadedFileUrl = files[0]?.fileUrl;
};
uploadedFileUrl = undefined;
}
Option 2: Create a Dropzone β Try on StackBlitz
The upload-dropzone
component renders an inline drag-and-drop file uploader.
Inputs:
uploader
(required): an instance of theUploader
class.options
(optional): an object following theUploadWidgetConfig
interface.onComplete
(optional): a callback containing the array of uploaded files as its parameter.onUpdate
(optional): same as above, but called after every file upload or removal.width
(optional): width of the dropzone.height
(optional): height of the dropzone.
import { Component } from "@angular/core";
import { Uploader, UploadWidgetConfig, UploadWidgetResult } from "uploader";
@Component({
selector: "app-root",
template: `
<upload-dropzone [uploader]="uploader"
[options]="options"
[onUpdate]="onUpdate"
[width]="width"
[height]="height">
</upload-dropzone>
`
})
export class AppComponent {
uploader = Uploader({
apiKey: "free"
});
options: UploadWidgetConfig = {
multi: false
};
// 'onUpdate' vs 'onComplete' attrs on 'upload-dropzone':
// - Dropzones are non-terminal by default (they don't have an end
// state), so by default we use 'onUpdate' instead of 'onComplete'.
// - To create a terminal dropzone, use the 'onComplete' attribute
// instead and add the 'showFinishButton: true' option.
onUpdate = (files: UploadWidgetResult[]) => {
alert(files.map(x => x.fileUrl).join("\n"));
};
width = "600px";
height = "375px";
}
The Result
The callbacks receive a Array<UploadWidgetResult>
:
{
fileUrl: "https://upcdn.io/FW25...", // URL to use when serving this file.
filePath: "/uploads/example.jpg", // File path (we recommend saving this to your database).
editedFile: undefined, // Edited file (for image crops). Same structure as below.
originalFile: {
fileUrl: "https://upcdn.io/FW25...", // Uploaded file URL.
filePath: "/uploads/example.jpg", // Uploaded file path (relative to your raw file directory).
accountId: "FW251aX", // Bytescale account the file was uploaded to.
originalFileName: "example.jpg", // Original file name from the user's machine.
file: { ... }, // Original DOM file object from the <input> element.
size: 12345, // File size in bytes.
lastModified: 1663410542397, // Epoch timestamp of when the file was uploaded or updated.
mime: "image/jpeg", // File MIME type.
metadata: {
... // User-provided JSON object.
},
tags: [
"tag1", // User-provided & auto-generated tags.
"tag2",
...
]
}
}
π API Support
π File Management API
Bytescale provides an Upload API, which supports the following:
- File uploading.
- File listing.
- File deleting.
- And more...
Uploading a "Hello World"
text file is as simple as:
curl --data "Hello World" \
-u apikey:free \
-X POST "https://api.bytescale.com/v1/files/basic"
Note: Remember to set -H "Content-Type: mime/type"
when uploading other file types!
π Image Processing API (Resize, Crop, etc.)
Bytescale also provides an Image Processing API, which supports the following:
- Image Resizing
- Image Cropping
- Image Compression
- Image Conversion
- Image Manipulation (blur, sharpen, brightness, etc.)
- Layering (e.g for text & image watermarks)
- and more...
Read the Image Processing API docs Β»
Original Image
Here's an example using a photo of Chicago:
https://upcdn.io/W142hJk/raw/example/city-landscape.jpg
Processed Image
Using the Image Processing API, you can produce this image:
https://upcdn.io/W142hJk/image/example/city-landscape.jpg
?w=900
&h=600
&fit=crop
&f=webp
&q=80
&blur=4
&text=WATERMARK
&layer-opacity=80
&blend=overlay
&layer-rotate=315
&font-size=100
&padding=10
&font-weight=900
&color=ffffff
&repeat=true
&text=Chicago
&gravity=bottom
&padding-x=50
&padding-bottom=20
&font=/example/fonts/Lobster.ttf
&color=ffe400
Full Documentation
Need a Headless (no UI) File Upload Library?
Can I use my own storage?
Yes: Bytescale supports AWS S3, Cloudflare R2, Google Storage, and DigitalOcean Spaces.
To configure a custom storage backend, please see:
https://www.bytescale.com/docs/storage/sources
π Create your Bytescale Account
Angular Uploader is the Angular Upload Widget for Bytescale: the best way to serve images, videos, and audio for web apps.