Copy and download file when deploying application (Angular)
This guide demonstrates how to copy and download file when deploying application.
Step by step
1. Create new application with .NET server-side project.
2. Add desired file(s) in project.csproj\project.vbproj
<ItemGroup>
<None Include="ProductSales.pdf" CopyToPublishDirectory="Always" />
...
3. Execute custom method similar to this article to download the file.
import { Component, Injector } from '@angular/core';
import { MainPageGenerated } from './main-page-generated.component';
// Import HttpClient and HttpParams which are needed to make HTTP calls.
import { HttpClient, HttpParams } from '@angular/common/http';
// Import the environment to get the server URL
import { environment } from '../../environments/environment';
@Component({
selector: 'main-page',
templateUrl: './main-page.component.html'
})
export class MainPageComponent extends MainPageGenerated {
constructor(injector: Injector, private http: HttpClient) {
super(injector);
}
getFile(fileName: string) {
// Extract the server URL
const url = environment.sample.replace(/odata.*/, '');
return this.http
// Request the GetFile action method
.get(`${url}api/custommethod/getfile`, {
responseType: 'blob',
params: new HttpParams().set('fileName', fileName)
})
.map((value: Blob, index: number) => {
// Force browser to show downloaded content as file
if (navigator.msSaveBlob) {
navigator.msSaveBlob(value, fileName);
} else {
const link = document.createElement("a");
if (link.download !== undefined) {
link.setAttribute("href", URL.createObjectURL(value));
link.setAttribute("download", fileName);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}).toPromise();
}
}
using System.IO;
using Microsoft.AspNetCore.Mvc;
namespace Sample.Controllers
{
[Route("api/[controller]/[action]")]
public class CustomMethodController : Controller
{
[HttpGet]
public IActionResult GetFile(string fileName)
{
if (System.IO.File.Exists(fileName))
{
return File(System.IO.File.ReadAllBytes(fileName), contentType: "application/pdf");
}
return NotFound();
}
}
}
Imports System.IO
Imports Microsoft.AspNetCore.Mvc
Namespace Sample.Controllers
<Route("api/[controller]/[action]")>
Public Class CustomMethodController
Inherits Controller
<HttpGet>
Public Function GetFile(ByVal fileName As String) As IActionResult
If System.IO.File.Exists(fileName) Then
Return File(System.IO.File.ReadAllBytes(fileName), contentType:="application/pdf")
End If
Return NotFound()
End Function
End Class
End Namespace
4. Deploy the application to IIS and download file.