简体   繁体   中英

Download pdf from a URL instead of opening in a new tab

Is there any possible way in Angular 10 / Typescript to download a PDF from a URL instead of opening it in a new tab?

Sample URL: http://www.africau.edu/images/default/sample.pdf

If you need to download and save it an anchor tag with the download attribute as @sasa suggests should suffice. Here's some sample code for Angular.

<a [href]="url" download>Click to download</a>

If you'd like to programatically download the file you need to use the HttpClient from Angular:

Install this dependency to make your life easier:

npm install file-saver --save
npm install -D @types/file-saver

And have a generic service

import {saveAs} from 'file-saver'
@Injectable({ providedIn: 'root' })
export class DownloadService {

  constructor(private http: HttpClient) {}

  downloadUrl(url: string, filename: string): Observable<Blob> {
    return this.http.get(url, {responseType: 'blob' }).pipe(
      map(res => res.blob()),
      tap(blob => saveAs(blob, filename))
    )
  }
}

Notice that calling the function won't download the file; you will need to subscribe to the Observable<Blob> returned or transform it into a Promise and await it

Sorry if I'm being too obvious but the download attribute to the a tag doesn't work?

You need to set the content type as application/octet-stream typically to inform the browser that it should download it instead of displaying it in a tab. Not sure specifically how in Angular 10 / Typescript:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM