@Delawere

Как реализовать загрузку файлов по ссылке?

Нужно сделать, чтобы по клике на ссылку автоматически начиналась загрузка файла.
Такое решение не работает:
<a href="localhost:8080/files/test.png" download="test.png" target="_blank">Download</a>

Клик по ссылке просто открывает png файл в новой вкладке.

Если в такую же ссылку подставлять url файла загруженного через input type="file", то все работает как нужно.

В чем может быть ошибка?
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
@Delawere Автор вопроса
В итоге нашел такое решение:
const {data: response} = await getFile()
const uInt8Array = new Uint8Array(response)
let i = uInt8Array.length
const biStr = new Array(i)
while (i--) {
   biStr[i] = String.fromCharCode(uInt8Array[i])
}
const data = biStr.join('')
const base64 = window.btoa(data)

const link = document.querySelector('#uniqId')
link.href = 'data:image/png;base64,' + base64


И ставимresponseData = 'arraybuffer'

Всем спасибо!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
meowto16
@meowto16
Делаю штуки
Попробуйте сделать ссылку относительной, вида /files/test.png и убрать target="_blank"
Ответ написан
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
В чем может быть ошибка?
Никакой ошибки нет. Во первых так будет работать только со ссылками сэйм орижин, во вторых, что касается
а возможно ли конвертировать файл из запроса в blob и давать ссылку уже на него?
- ответ тот же - только с сейм орижин.

Единственно можете подменять ссылку на свою, перенаправлять на скрипт на своем сервере, котрый курлом заберет файл с удаленного сервера и уже от себя его отдавать с заголовком аттачмент.
Content-Disposition: attachment; filename="filename.jpg"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы