Скачать с js паспорт, сгенерированный из php

0

Мне нужно загрузить файл сберегательной книжки, созданный с помощью php-скрипта в js (угловое приложение) im, пытающегося использовать этот lib http://danml.com/download.html

im используя этот код на стороне сервера:

header('Pragma: no-cache');
header('Content-type: application/vnd.apple.pkpass');
header('Content-Disposition: attachment; filename="card.pkpass"');

echo base64_encode($this->pass_outputfile);

это на стороне клиента:

var filename = responseInfo.headers["content-disposition"].indexOf("filename=");
filename = responseInfo.headers["content-disposition"].substring(filename+9);

var mime = responseInfo.headers["content-type"];

download(window.atob(response), filename.replace(/\"/g,''), mime);

загрузка начинается хорошо, но файл pkpass недействителен... кажется, что файл сжимается 2 раза... кто-то может сказать мне, почему?

Теги:
passbook

1 ответ

-1

Хорошо, я наконец получил его, расшифровав base64 как blob с этой функцией,

function base64toBlob(base64Data, contentType) {
    contentType = contentType || '';
    var sliceSize = 1024;
    var byteCharacters = atob(base64Data);
    var bytesLength = byteCharacters.length;
    var slicesCount = Math.ceil(bytesLength / sliceSize);
    var byteArrays = new Array(slicesCount);

    for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
        var begin = sliceIndex * sliceSize;
        var end = Math.min(begin + sliceSize, bytesLength);

        var bytes = new Array(end - begin);
        for (var offset = begin, i = 0 ; offset < end; ++i, ++offset) {
            bytes[i] = byteCharacters[offset].charCodeAt(0);
        }
        byteArrays[sliceIndex] = new Uint8Array(bytes);
    }
    return new Blob(byteArrays, { type: contentType });
}

а затем просто используйте функцию загрузки

download(base64toBlob(response,"application/vnd.apple.pkpass"), filename.replace(/\"/g,''), mime);
  • 0
    Вау, поговорим об использовании кувалды, чтобы сломать орех! readfile($this->pass_outputfile); вместо того, чтобы выводить поток base64, все, что вам нужно.
  • 0
    Хорошо, но мне нужно скачать его с js как ответ http без сохранения файла перед загрузкой .... pass_outputfile не путь к файлу
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню