Запуск запроса на загрузку в iOS Safari для PDF-файла

#javascript #ios #pdf #download #safari

#javascript #iOS #PDF #Скачать #safari

Вопрос:

Я пытаюсь показать пользователям iOS моего веб-приложения (встроенное) приглашение для загрузки PDF-файла, подобного этому, когда они нажимают кнопку / ссылку:

Запрос на загрузку iOS

К сожалению, все, что я пробовал, привело к тому, что Safari открыл файл на новой или текущей вкладке. Я попытался использовать FileSaver.js вот так:

 saveAs("https://example.com/pdf", "filename.pdf");
  

Я попробовал a тег: (с и без target="_blank" )

 <a href="https://example.com/pdf">Download</a>
  

Я попытался использовать выборку, чтобы получить файл и использовать FileSaver.js чтобы спасти Blob :

 const res = await fetch("https://example.com/pdf", {
        mode: "cors",
        method: "GET",
        cache: "force-cache",
        headers: {
          Accept: "application/pdf",
        },
      });

const blob = await res.blob();

saveAs(blob, "filename.pdf");
  

Однако я могу контролировать ответ сервера. Это заголовки, которые я сейчас устанавливаю

 Content-Type:  application/pdf
Content-Disposition: attachment; filename="Bauhaus - 01-04-2019 15-59.pdf"
  

Заранее спасибо!

Ответ №1:

Если вы установите Content-Type заголовок в ответе сервера на application/octet-stream , Safari не распознает файл как PDF и, следовательно, не откроет его и не предложит приглашение на загрузку.

Комментарии:

1. Это уже сделано. Все еще открываю PDF-файлы вместо их загрузки.

2. Я столкнулся с той же проблемой @Antoniosssss — смогли ли вы найти способ открыть приглашение в формате PDF?

3. Нет, еще нет, даже FileSaver не заставил его работать.

4. @ShaneLoveland Я подозреваю, что это может сработать как двухэтапный процесс. Пользователь нажимает ссылку -> загрузить pdf, создает blobURL, создает ссылку / кнопку загрузки для этого большого двоичного объекта. Затем пользователь должен нажать эту другую ссылку / кнопку.