is there is any way possible to download multiple files(.pkpass) on iphone?

Discussão em 'Angular' iniciado por Rachit Saxena, Outubro 30, 2024.

  1. I am trying to download multiple boarding passses in ios using blob.

    initially I am using this

    private downloadMultipleFiles(boardingPassURLs : string[]): void{
    boardingPassURLs.forEach((url) => {
    this.downloadFileService.downloadFileFromURL(url).subscribe((blob) => {
    const a = document.createElement('a');
    const objectUrl = URL.createObjectURL(blob);
    a.href = objectUrl;
    a.download = 'filenameXYZ.pkpass';
    a.click();
    URL.revokeObjectURL(objectUrl);
    });
    });
    this.loaderService.setIsLoaderVisible(false);
    }

    downloadFileFromURL(url: string) {
    return this.http.get(url, { responseType: 'blob' });
    }


    It works on windows for all browsers. But when i chcecked iphone in safari it says


    "Safari can not download this file."
    ​

    I have tried these approaches which is mentioned below but it did'nt worked out either.

    1. Tried with adding timeouts

    private downloadMultipleFiles(boardingPassURLs : string[]): void{
    boardingPassURLs.forEach((url) => {
    setTimeout(() => {
    this.downloadFileService.downloadFileFromURL(url).subscribe((blob) => {
    const a = document.createElement('a');
    const objectUrl = URL.createObjectURL(blob);
    a.href = objectUrl;
    a.download = 'filenameXYZ.pkpass';
    a.click();
    URL.revokeObjectURL(objectUrl);
    });
    },500);
    });
    this.loaderService.setIsLoaderVisible(false);
    }

    1. Added MIME content Type

    private downloadMultipleFiles(boardingPassURLs: string[]): void {
    boardingPassURLs.forEach((url, index) => {
    setTimeout(() => {
    this.downloadFileService.downloadFileFromURL(url).subscribe((blob) => {
    const modifiedBlob = new Blob([blob], { type: 'application/octet-stream' });
    const objectUrl = URL.createObjectURL(modifiedBlob);
    const a = document.createElement('a');
    a.href = objectUrl;
    a.download = 'filenameXYZ.pkpass';
    a.click();
    URL.revokeObjectURL(objectUrl);
    });
    }, index * 500);
    });
    this.loaderService.setIsLoaderVisible(false);
    }

    downloadFileFromURL(url: string) {
    const headers = new HttpHeaders({
    Accept: 'application/octet-stream',
    });

    return this.http.get(url, { headers,responseType: 'blob' });
    }


    In this scenario only the initial file was downlaoding, and that too was blank.


    1. Tried MIME Type - 'application/vnd.apple.pkpass' But it gaves the same error as > "Safari can not download this file."


    2. Tried using Iframes

    private downloadMultipleFiles(boardingPassURLs: string[]): void {
    const iframe = document.createElement('iframe');
    iframe.style.display = 'none';
    document.body.appendChild(iframe);

    boardingPassURLs.forEach((url, index) => {
    setTimeout(() => {
    this.downloadFileService.downloadFileFromURL(url).subscribe((blob) => {
    const objectUrl = URL.createObjectURL(blob);

    const a = iframe.contentWindow?.document.createElement('a');
    if (a) {
    a.href = objectUrl;
    a.download = 'filenameXYZ.pkpass';
    a.click();
    }

    URL.revokeObjectURL(objectUrl);
    });
    }, index * 500);
    });
    this.loaderService.setIsLoaderVisible(false);
    }


    It did'nt worked either.

    Continue reading...

Compartilhe esta Página