Angular is a Typescript-based open source framework for building mobile and web applications. It’s very different from AngularJS because it’s a complete rewrite from ground up. Angular is currently at version 9 and its usage amongst developers keeps increasing by the day.
Performing an Angular file upload to Cloudinary involves a two-part process:
- The client side (the user interface) obtains the files to be uploaded through a form control or component.
- The server side of the app receives, processes, transforms and stores the files in the cloud.
To make all that happen, set up an HTML template and build an Angular file upload component. The sections below walk you through the procedures in detail.
Enabling Angular file uploads to Cloudinary takes two steps.
First, place a file upload component in your app for your users by doing either of the following:
-
Specify, in HTML, the HTML5 file’s input type by adding the code below to the
app.component.html
file:<div> <form action="" method="post" enctype="multipart/form-data"> <input type="file"> </form> <label>Choose file</label> </div>
Code language: HTML, XML (xml) -
Install the Angular file upload component
ng2-file-upload
with this NPM command:npm install ng2-file-upload --save
-
Afterwards, attach the Angular file upload component to your HTML markup by adding the related parameters to the
app.component.html
file:- For multiple file uploads
`<input type="file" ng2FileSelect [uploader]="uploader" multiple />`
Code language: HTML, XML (xml)- For single file uploads
`<input type="file" ng2FileSelect [uploader]="uploader" />` `<button [disabled]="loading" (click)="upload()" class="btn">Upload</button>` `_app.component.html_`
Code language: HTML, XML (xml)
-
First, install the Angular File Upload Cloudinary library that works for Angular 5, 6, and 7 with this NPM command:
npm install @cloudinary/angular-5.x --save
Code language: CSS (css)
Now create an angular file upload component by adding the code below to the src/app/app.component.ts
file:
import { Component, OnInit, Input } from '@angular/core';
import { FileUploader, FileUploaderOptions, ParsedResponseHeaders } from 'ng2-file-upload';
import { Cloudinary } from '@cloudinary/angular-5.x';
@Component({
selector: 'app-list',
templateUrl: 'app.component.html'
})
export class ImageUploadComponent implements OnInit {
@Input()
responses: Array<any>;
private hasBaseDropZoneOver: boolean = false;
private uploader: FileUploader;
private title: string;
constructor(
private cloudinary: Cloudinary,
private zone: NgZone,
private http: HttpClient
) {
this.responses = [];
this.title = '';
}
ngOnInit(): void {
// Create the file uploader, wire it to upload to your account
const uploaderOptions: FileUploaderOptions = {
url: `https://api.cloudinary.com/v1_1/${this.cloudinary.config().cloud_name}/upload`,
// Upload files automatically upon addition to upload queue
autoUpload: true,
// Use xhrTransport in favor of iframeTransport
isHTML5: true,
// Calculate progress independently for each uploaded file
removeAfterUpload: true,
// XHR request headers
headers: [
{
name: 'X-Requested-With',
value: 'XMLHttpRequest'
}
]
};
this.uploader = new FileUploader(uploaderOptions);
this.uploader.onBuildItemForm = (fileItem: any, form: FormData): any => {
// Add Cloudinary unsigned upload preset to the upload form
form.append('upload_preset', this.cloudinary.config().upload_preset);
// Add file to upload
form.append('file', fileItem);
// Use default "withCredentials" value for CORS requests
fileItem.withCredentials = false;
return { fileItem, form };
};
fileOverBase(e: any): void {
this.hasBaseDropZoneOver = e;
}
}
_upload.component.ts_
Code language: JavaScript (javascript)
Replace the variable cloud_ name
in the code above with your account’s cloud name as displayed in your Cloudinary Dashboard.
The ImageUpload
component in the code processes the uploaded files through the ng2-file-upload
component, subsequently uploading them to Cloudinary.
Remarkably, such a setup eliminates the tedious chore of developing a back-end API to receive files from the front-end and to validate and process them before storing them in Cloudinary. As soon as a user has uploaded a file, Cloudinary seamlessly handles the remaining tasks that culminate in the file being stored in the Media Library.
For the complete code of the entire process, see this comprehensive GitHub repository.
For app developers who are on AngularJS, follow the steps below to facilitate AngularJS file uploads.
First, install the Cloudinary AngularJS SDK and the ng-file-upload
library with this NPM command:
bower install ng-file-upload cloudinary_ng --save
Next, define CloudinaryProvider
in your app’s configuration file with this code:
yourApp.config(['cloudinaryProvider', function (cloudinaryProvider) {
cloudinaryProvider
.set("cloud_name", "good")
.set("secure", true)
.set("upload_preset", "my_preset");
}]);
Code language: JavaScript (javascript)
Replace the variable cloud_ name
with your account’s cloud name as displayed in your Cloudinary Dashboard.
Finally, attach an uploadFiles
function in your app to the controller $scope
with, for example, this code:
$scope.uploadFiles = function(files){
$scope.files = files;
angular.forEach(files, function(file){
if (file && !file.$error) {
file.upload = $upload.upload({
url: "https://api.cloudinary.com/v1_1/" + cloudinary.config().cloud_name + "/upload",
data: {
upload_preset: cloudinary.config().upload_preset,
context: 'image=' + $scope.title,
file: file
}
}).progress(function (e) {
file.progress = Math.round((e.loaded * 100.0) / e.total);
file.status = "Uploading... " + file.progress + "%";
}).success(function (data, status, headers, config) {
$rootScope.list = $rootScope.list || [];
data.context = {custom: {image: $scope.title}};
file.result = data;
$rootScope.photos.push(data);
}).error(function (data, status, headers, config) {
file.result = data;
});
}
});
};
Code language: PHP (php)
The $upload.upload
function uploads all the files straight to Cloudinary.
Cloudinary’s Angular SDK contains several out-of-the-box components that enable you to manipulate, optimize, and deliver images in the best format. Add those components to your Angular app.
Afterwards, specify the attributes and values that you desire for the parameters for the <cl-image>
component, for example:
<cl-image public-id="dog" angle="20" format="jpg">
<cl-transformation height="150" width="150" crop="fill" effect="sepia"></cl-transformation>
<cl-transformation overlay="text:arial_20:Angular" color="#EECCAA" gravity="south" y="20"></cl-transformation>
</cl-image>
Code language: HTML, XML (xml)
In the above code, the value of public-id
(dog) is the name of the image stored in Cloudinary.
To manipulate and transform images and files as you desire, simply embed the <cl-transformation>
component within <cl-image>
. For details of the many options available, see the related Cloudinary documentation. You’ll be amazed at the wealth of choices at your fingertips and the marvelous effects the manipulation and transformation tasks produce. For the upload code, click here and for the full app configuration, click here. Do give it a whirl!
- Automating File Upload and Sharing
- Uploading PHP Files and Rich Media the Easy Way
- AJAX File Upload – Quick Tutorial & Time Saving Tips
- Impressed by WhatsApp technology? Clone WhatsApp Technology to Build a File Upload Android App
- Direct Image Uploads From the Browser to the Cloud With jQuery
- File Upload With Angular to Cloudinary
- Uploading Vue Files and Rich Media in Two Easy Steps
- Node.js File Upload To a Local Server Or to the Cloud
- Laravel File Upload to a Local Server Or to the Cloud
- JavaScript File Upload in Two Simple Step