Angular File Upload - GeeksforGeeks (2024)

Skip to content

Angular File Upload - GeeksforGeeks (1)

Last Updated : 06 Sep, 2022

Summarize

Comments

Improve

Suggest changes

Like Article

Like

Save

Report

The file upload is an essential component to make a form that store some image kind of data. It helps in applications using image upload or in the file sharing. This file-upload component uses file.io API for uploading file and in return it provides a shareable link. Furthermore, we can send get request to shareable link to get the file but for now, our only focus is on upload section so we only use the post method.

Approach:

  1. Create a new angular app using following command-
    ng new angular-file-upload 
  2. Move inside the app by using cd command-
    cd src/app/
  3. Generate new component file-upload-
    ng g c file-upload/ 
  4. Open src/app folder and start editing app.component.html file.
  5. Create a service for file-upload component via command-
    ng g s file-upload/
  6. Open src/app/file-upload folder and start editing file-upload.component.ts file.

    import { Component, OnInit } from '@angular/core';

    import { FileUploadService } from './file-upload.service';

    @Component({

    selector: 'app-file-upload',

    templateUrl: './file-upload.component.html',

    styleUrls: ['./file-upload.component.css']

    })

    export class FileUploadComponent implements OnInit {

    // Variable to store shortLink from api response

    shortLink: string = "";

    loading: boolean = false; // Flag variable

    file: File = null; // Variable to store file

    // Inject service

    constructor(private fileUploadService: FileUploadService) { }

    ngOnInit(): void {

    }

    // On file Select

    onChange(event) {

    this.file = event.target.files[0];

    }

    // OnClick of button Upload

    onUpload() {

    this.loading = !this.loading;

    console.log(this.file);

    this.fileUploadService.upload(this.file).subscribe(

    (event: any) => {

    if (typeof (event) === 'object') {

    // Short link via api response

    this.shortLink = event.link;

    this.loading = false; // Flag variable

    }

    }

    );

    }

    }

  7. Open src/app/file-upload/ and start editing file-upload.service.ts file.

    import { Injectable } from '@angular/core';

    import {HttpClient} from '@angular/common/http';

    import {Observable} from 'rxjs';

    @Injectable({

    providedIn: 'root'

    })

    export class FileUploadService {

    // API url

    baseApiUrl = "https://file.io"

    constructor(private http:HttpClient) { }

    // Returns an observable

    upload(file):Observable<any> {

    // Create form data

    const formData = new FormData();

    // Store form name as "file" with file data

    formData.append("file", file, file.name);

    // Make http post request over api

    // with formData as req

    return this.http.post(this.baseApiUrl, formData)

    }

    }

  8. Open src/app/file-upload and start editing file-upload.component.html file.

    <div class="text-center">

    <input class="form-control" type="file"

    (change)="onChange($event)">

    <button (click)="onUpload()"

    class="btn btn-success">

    Upload

    </button>

    </div>

    <!-- Shareable short link of uploaded file -->

    <div class="container text-center jumbotron"

    *ngIf="shortLink">

    <h2> Visit Here</h2>

    <a href="{{shortLink}}">{{shortLink}}</a>

    </div>

    <!--Flag variable is used here-->

    <div class="container" *ngIf="loading">

    <h3>Loading ...</h3>

    </div>

  9. Open src/app/ and start editing app.module.ts file.

    import { BrowserModule } from

    '@angular/platform-browser';

    import { NgModule } from '@angular/core';

    import { FileUploadComponent } from

    './file-upload/file-upload.component';

    import { AppComponent } from './app.component';

    import {HttpClientModule} from

    '@angular/common/http';

    @NgModule({

    declarations: [

    AppComponent,

    FileUploadComponent,

    ],

    imports: [

    BrowserModule,

    HttpClientModule

    ],

    providers: [],

    bootstrap: [AppComponent]

    })

    export class AppModule { }

  10. Now run this command to serve on localhost
    ng serve
  11. Output:

  • Before file selection:
    Angular File Upload - GeeksforGeeks (3)
  • After file selection and clicking on button:
    Angular File Upload - GeeksforGeeks (4)
  • After loading is completed:
    Angular File Upload - GeeksforGeeks (5)

HTML is the foundation of webpages, is used for webpage development by structuring websites and web apps.You can learn HTML from the ground up by following this HTML Tutorial and HTML Examples.



Angular File Upload - GeeksforGeeks (6)

GeeksforGeeks

Angular File Upload - GeeksforGeeks (7)

Improve

Please Login to comment...

We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy

Angular File Upload - GeeksforGeeks (8)

'); $('.spinner-loading-overlay').show(); jQuery.ajax({ url: writeApiUrl + 'create-improvement-post/?v=1', type: "POST", contentType: 'application/json; charset=utf-8', dataType: 'json', xhrFields: { withCredentials: true }, data: JSON.stringify({ gfg_id: post_id, check: true }), success:function(result) { jQuery.ajax({ url: writeApiUrl + 'suggestions/auth/' + `${post_id}/`, type: "GET", dataType: 'json', xhrFields: { withCredentials: true }, success: function (result) { $('.spinner-loading-overlay:eq(0)').remove(); var commentArray = result; if(commentArray === null || commentArray.length === 0) { // when no reason is availaible then user will redirected directly make the improvment. // call to api create-improvement-post $('body').append('

'); $('.spinner-loading-overlay').show(); jQuery.ajax({ url: writeApiUrl + 'create-improvement-post/?v=1', type: "POST", contentType: 'application/json; charset=utf-8', dataType: 'json', xhrFields: { withCredentials: true }, data: JSON.stringify({ gfg_id: post_id, }), success:function(result) { $('.spinner-loading-overlay:eq(0)').remove(); $('.improve-modal--overlay').hide(); $('.unlocked-status--improve-modal-content').css("display","none"); $('.create-improvement-redirection-to-write').attr('href',writeUrl + 'improve-post/' + `${result.id}` + '/', '_blank'); $('.create-improvement-redirection-to-write')[0].click(); }, error:function(e) { $('.spinner-loading-overlay:eq(0)').remove(); var result = e.responseJSON; if(result.detail.non_field_errors.length){ $('.improve-modal--improve-content .improve-modal--improve-content-modified').text(`${result.detail.non_field_errors}.`); jQuery('.improve-modal--overlay').show(); jQuery('.improve-modal--improvement').show(); $('.locked-status--impove-modal').css("display","block"); $('.unlocked-status--improve-modal-content').css("display","none"); $('.improve-modal--improvement').attr("status","locked"); $('.improvement-reason-modal').hide(); } }, }); return; } var improvement_reason_html = ""; for(var comment of commentArray) { // loop creating improvement reason list markup var comment_id = comment['id']; var comment_text = comment['suggestion']; improvement_reason_html += `

${comment_text}

`; } $('.improvement-reasons_wrapper').html(improvement_reason_html); $('.improvement-bottom-btn').html("Create Improvement"); $('.improve-modal--improvement').hide(); $('.improvement-reason-modal').show(); }, error: function(e){ $('.spinner-loading-overlay:eq(0)').remove(); // stop loader when ajax failed; }, }); }, error:function(e) { $('.spinner-loading-overlay:eq(0)').remove(); var result = e.responseJSON; if(result.detail.non_field_errors.length){ $('.improve-modal--improve-content .improve-modal--improve-content-modified').text(`${result.detail.non_field_errors}.`); jQuery('.improve-modal--overlay').show(); jQuery('.improve-modal--improvement').show(); $('.locked-status--impove-modal').css("display","block"); $('.unlocked-status--improve-modal-content').css("display","none"); $('.improve-modal--improvement').attr("status","locked"); $('.improvement-reason-modal').hide(); } }, }); } else { if(loginData && !loginData.isLoggedIn) { $('.improve-modal--overlay').hide(); if ($('.header-main__wrapper').find('.header-main__signup.login-modal-btn').length) { $('.header-main__wrapper').find('.header-main__signup.login-modal-btn').click(); } return; } } }); $('.left-arrow-icon_wrapper').on('click',function(){ if($('.improve-modal--suggestion').is(":visible")) $('.improve-modal--suggestion').hide(); else{ $('.improvement-reason-modal').hide(); } $('.improve-modal--improvement').show(); }); function loadScript(src, callback) { var script = document.createElement('script'); script.src = src; script.onload = callback; document.head.appendChild(script); } function suggestionCall() { var suggest_val = $.trim($("#suggestion-section-textarea").val()); var array_String= suggest_val.split(" ") var gCaptchaToken = $("#g-recaptcha-response-suggestion-form").val(); var error_msg = false; if(suggest_val != "" && array_String.length >=4){ if(suggest_val.length <= 2000){ var payload = { "gfg_post_id" : `${post_id}`, "suggestion" : `

${suggest_val}

`, } if(!loginData || !loginData.isLoggedIn) // User is not logged in payload["g-recaptcha-token"] = gCaptchaToken jQuery.ajax({ type:'post', url: "https://apiwrite.geeksforgeeks.org/suggestions/auth/create/", xhrFields: { withCredentials: true }, crossDomain: true, contentType:'application/json', data: JSON.stringify(payload), success:function(data) { jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-section-textarea').val(""); jQuery('.suggest-bottom-btn').css("display","none"); // Update the modal content const modalSection = document.querySelector('.suggestion-modal-section'); modalSection.innerHTML = `

Thank You!

Your suggestions are valuable to us.

You can now also contribute to the GeeksforGeeks community by creating improvement and help your fellow geeks.

`; }, error:function(data) { jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-modal-alert').html("Something went wrong."); jQuery('#suggestion-modal-alert').show(); error_msg = true; } }); } else{ jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-modal-alert').html("Minimum 5 Words and Maximum Character limit is 2000."); jQuery('#suggestion-modal-alert').show(); jQuery('#suggestion-section-textarea').focus(); error_msg = true; } } else{ jQuery('.spinner-loading-overlay:eq(0)').remove(); jQuery('#suggestion-modal-alert').html("Enter atleast four words !"); jQuery('#suggestion-modal-alert').show(); jQuery('#suggestion-section-textarea').focus(); error_msg = true; } if(error_msg){ setTimeout(() => { jQuery('#suggestion-section-textarea').focus(); jQuery('#suggestion-modal-alert').hide(); }, 3000); } } document.querySelector('.suggest-bottom-btn').addEventListener('click', function(){ jQuery('body').append('

'); jQuery('.spinner-loading-overlay').show(); if(loginData && loginData.isLoggedIn) { suggestionCall(); return; } // load the captcha script and set the token loadScript('https://www.google.com/recaptcha/api.js?render=6LdMFNUZAAAAAIuRtzg0piOT-qXCbDF-iQiUi9KY',[], function() { setGoogleRecaptcha(); }); }); $('.improvement-bottom-btn.create-improvement-btn').click(function() { //create improvement button is clicked $('body').append('

'); $('.spinner-loading-overlay').show(); // send this option via create-improvement-post api jQuery.ajax({ url: writeApiUrl + 'create-improvement-post/?v=1', type: "POST", contentType: 'application/json; charset=utf-8', dataType: 'json', xhrFields: { withCredentials: true }, data: JSON.stringify({ gfg_id: post_id }), success:function(result) { $('.spinner-loading-overlay:eq(0)').remove(); $('.improve-modal--overlay').hide(); $('.improvement-reason-modal').hide(); $('.create-improvement-redirection-to-write').attr('href',writeUrl + 'improve-post/' + `${result.id}` + '/', '_blank'); $('.create-improvement-redirection-to-write')[0].click(); }, error:function(e) { $('.spinner-loading-overlay:eq(0)').remove(); var result = e.responseJSON; if(result.detail.non_field_errors.length){ $('.improve-modal--improve-content .improve-modal--improve-content-modified').text(`${result.detail.non_field_errors}.`); jQuery('.improve-modal--overlay').show(); jQuery('.improve-modal--improvement').show(); $('.locked-status--impove-modal').css("display","block"); $('.unlocked-status--improve-modal-content').css("display","none"); $('.improve-modal--improvement').attr("status","locked"); $('.improvement-reason-modal').hide(); } }, }); });

Angular File Upload - GeeksforGeeks (2024)
Top Articles
What to Know About Buying an Investment Property - NerdWallet
Taxes for Entrepreneurs | 3 ways to prepare all year for tax time - shannaskidmore.com
Evil Dead Movies In Order & Timeline
Northern Whooping Crane Festival highlights conservation and collaboration in Fort Smith, N.W.T. | CBC News
Dr Klabzuba Okc
Optimal Perks Rs3
Buckaroo Blog
Kagtwt
Vardis Olive Garden (Georgioupolis, Kreta) ✈️ inkl. Flug buchen
Sams Gas Price Fairview Heights Il
Items/Tm/Hm cheats for Pokemon FireRed on GBA
Cvs Learnet Modules
The Binding of Isaac
Dumb Money
Oro probablemente a duna Playa e nomber Oranjestad un 200 aña pasa, pero Playa su historia ta bay hopi mas aña atras
Radio Aleluya Dialogo Pastoral
Sony E 18-200mm F3.5-6.3 OSS LE Review
7543460065
Q33 Bus Schedule Pdf
Navy Female Prt Standards 30 34
Byui Calendar Fall 2023
Accident On May River Road Today
Morristown Daily Record Obituary
Gopher Hockey Forum
Geometry Review Quiz 5 Answer Key
Beverage Lyons Funeral Home Obituaries
Today Was A Good Day With Lyrics
When Does Subway Open And Close
Expression&nbsp;Home&nbsp;XP-452 | Grand public | Imprimantes jet d'encre | Imprimantes | Produits | Epson France
Biografie - Geertjan Lassche
Rock Salt Font Free by Sideshow » Font Squirrel
The Ultimate Guide to Obtaining Bark in Conan Exiles: Tips and Tricks for the Best Results
Average weekly earnings in Great Britain
Marine Forecast Sandy Hook To Manasquan Inlet
The 38 Best Restaurants in Montreal
The Syracuse Journal-Democrat from Syracuse, Nebraska
19 Best Seafood Restaurants in San Antonio - The Texas Tasty
Can You Buy Pedialyte On Food Stamps
Cherry Spa Madison
Latest Nigerian Music (Next 2020)
Cheetah Pitbull For Sale
Legit Ticket Sites - Seatgeek vs Stubhub [Fees, Customer Service, Security]
Janaki Kalaganaledu Serial Today Episode Written Update
Emily Tosta Butt
R: Getting Help with R
Vci Classified Paducah
Sapphire Pine Grove
Motorcycle For Sale In Deep East Texas By Owner
10 Bedroom Airbnb Kissimmee Fl
Nfsd Web Portal
91 East Freeway Accident Today 2022
The Missile Is Eepy Origin
Latest Posts
Article information

Author: Aron Pacocha

Last Updated:

Views: 5898

Rating: 4.8 / 5 (68 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Aron Pacocha

Birthday: 1999-08-12

Address: 3808 Moen Corner, Gorczanyport, FL 67364-2074

Phone: +393457723392

Job: Retail Consultant

Hobby: Jewelry making, Cooking, Gaming, Reading, Juggling, Cabaret, Origami

Introduction: My name is Aron Pacocha, I am a happy, tasty, innocent, proud, talented, courageous, magnificent person who loves writing and wants to share my knowledge and understanding with you.