Skip to main content

Download File Angular 8 And ASP.NET Web API 2

Web API Code :
[Route("DownloadFile")]
        [HttpGet]
        public HttpResponseMessage DownloadFile(string filePath)
        {
            HttpResponseMessage Response;
            //string RootPath = HttpContext.Current.Server.MapPath("~/Upload/");
            string FilePath = HttpContext.Current.Server.MapPath(filePath);

            if (File.Exists(FilePath) == false)
            {
                Response = Request.CreateResponse(HttpStatusCode.NotFound, "File does not exist.");
            }
            else
            {
                // Serve the file to the client
                string AttachmentFileName = null;
                string UserAgent = Request.Headers.UserAgent.ToString().ToLower();
                bool IsMicrosoftVariant = false;

                IsMicrosoftVariant = UserAgent.Contains("msie") || UserAgent.Contains("edge");
                //AttachmentFileName = IsMicrosoftVariant == true ? Uri.EscapeDataString(OriginalName) : OriginalName;
                AttachmentFileName = string.Format("\"{0}\"", AttachmentFileName);

                Response = Request.CreateResponse(HttpStatusCode.OK);
                Response.Content = new StreamContent(new FileStream(FilePath, FileMode.Open, FileAccess.Read));
                Response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
                Response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
                Response.Content.Headers.ContentDisposition.FileName = AttachmentFileName;
            }
            return Response;
        }


Angular Sevice Code:

import { HttpClient, HttpRequest, HttpEventType, HttpResponse, HttpHeaders } from '@angular/common/http';
import { Observable, Subject } from 'rxjs';
import {saveFile, saveAs} from 'file-saver';
import { map, filter, catchError, mergeMap } from 'rxjs/operators';

@Injectable()
export class SharedService {
  constructor(private http: HttpClient) {}

  downloadFile(data: any, filename: string) {
    const blob = new Blob([data], { type: 'application/octet-stream' });
    saveAs(blob, filename);
  }

  //This method gets the details of one client.
  public getDocument(id: number, fileId: string, fileName: string) {

    this.http.get(AppSettings.DOCUMENTDOWNLOAD_ENDPOINT(id, fileId), {responseType: 'blob'})
      .subscribe((data) => this.downloadFile(data, fileName), error => console.log('Error downloading the file.'),
        () => console.info('OK'));
  }
}

Comments

Popular posts from this blog

update your package-lock.json according to what you have specified in the package.json file

  The objective of the   npm update   command is to update your   package-lock.json   according to what you have specified in the   package.json   file. This is the normal behavior. If you want to update your package.json file, you can use  npm-check-updates :  npm install -g npm-check-updates . You can then use these commands: ncu  Checks for updates from the package.json file ncu -u  Update the package.json file npm update --save  Update your package-lock.json file from the package.json file

Limit Upload File Type Extensions ASP.NET MVC 5

  //-----------------------------------------------------------------------    // <copyright file="AllowExtensionsAttribute.cs" company="None">    //     Copyright (c) Allow to distribute this code and utilize this code for personal or commercial purpose.    // </copyright>    // <author>Asma Khalid</author>    //-----------------------------------------------------------------------       namespace  ImgExtLimit.Helper_Code.Common   {        using  System;        using  System.Collections.Generic;        using  System.ComponentModel.DataAnnotations;        using  System.Linq;      ...

Referenced assembly does not have a strong name

  Steps to create strong named assembly Step 1 : Run visual studio command prompt and go to directory where your DLL located.   For Example my DLL located in  D:/hiren/Test.dll Step 2 : Now create  il file using below command.    D:/hiren> ildasm /all /out=Test.il Test.dll   (this command generate code library) Step 3 : Generate new Key for sign your project.    D:/hiren> sn -k mykey.snk Step 4 : Now sign your library using ilasm command.    D:/hiren> ilasm /dll /key=mykey.snk Test.il so after this step your assembly contains strong name and signed. Jjust add reference this new assembly in your project and compile project its running now. codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name