16. React + Node.js - Скачивание файлов с сервера - Облачное хранилище

preview_player
Показать описание

Исходный код урока -

Ссылка на макет в figma -

Ссылки на плейлисты
Рекомендации по теме
Комментарии
Автор

Дошел до этого урока и хотел бы для будущих зрителей сделать пару примечаний:

1. blob из axios получить довольно легко, нужно просто добавить responseType: blob

const fileBlob = instanceAxios.get(`/files/download/?id=${fileId}`, {
responseType: 'blob'
})
.then(data => data.data)

2. А еще я заметил, что мы постоянно прикрепляем авторизацию к каждому запросу, а также прописываем полный url. Это можно исправить с помощью создания инстанса axios через использования axios.create:

export const instanceAxios = axios.create({
headers: {Authorization: `Bearer
})

И потом использовать именно instanceAxios в запросах (это тот же аксиос, просто с вашими параметрами), стараюсь убирать дублирующийся код.


Еще раз автору курса спасибо, всем хорошего дня

alexey_horbunov
Автор

лучший курс на русском в ютубе. намного интересней примитивных интернет магазинов, как у других авторов. спасибо за проделанную работу!)

КачурЕвгений
Автор

А я такую штуку через Buffer реализовывал, но твое решение мне нравится на много больше

DogSayWaf
Автор

Твоё стоп пропагенейшн каждый раз меня улыбает)

blgarOk
Автор

очень крутой курс, уже второй день сижу)) как всегда пропустил что-то и сидишь пол часа не можешь понять, что случилось) пропустил await и не загружается файл))

moi-nick-zanyat
Автор

Привет, огромное спасибо за урок, круто просто, оказывается это так легко сделать download)) по поводу ошибки в ключах в FileList, я раньше написал через нижнее подчеркивание, еще когда мы создавали только компоненты и их рендер, поэтому ошибки не было, а я там просто логику рендера описал, тупанул, надо было подумать про ключ лучше ) Если не помнишь, я в предыдущем уроке спрашивал )
Кстати, ты тут не дописал return в FileController в функции downloadFile, в блоке catch)

АнтонГалай
Автор

Если размер файла >= 100мб, мы будем ждать полную загрузку файла локально в браузер, а после он же предложит нам его сохранить?)

gravedigger
Автор

К вопросу о Authorization - доцельно ли добавлять его в headers в axios.create({headers: {Authorization }}) ?
Ведь не в каждом запросе нам нужно отправлять токен. Да и пока не залогинет - то токена и нету

Спасибо за уроки!!

Юра-
Автор

почему-то скачиваются только файлы с расширением txt и xls. а вот mp3 не скачивается...

АлександрСосо-щб
Автор

У меня аналогичный кейс, скачивание через блоб. Столкнулся с проблемой, файл загрузки отображается в нижней части окна браузера только по завершению скачивание, и не отображает индикацию процесса. Подскажите, в чем проблема и как можно решить?

СтепанЦуканов-ты
Автор

Все получилось. Но file._id на клиенте это вро де как не ок. Сам то я настроил model, и периодически ловлю ошибки когда у меня ._id проскакивает с вашего кода. Спасибо.

Max-krie
Автор

Возможно кому-то пригодится.
Как я делал загрузку файла с помощью RTK Query.

Сам эндпоинт:

downloadFile: build.query({
query: ({ _id }) => ({
url: '/download',
method: 'GET',
params: {
_id,
},
responseHandler: async (response) => {
return response.blob())
},
cache: 'no-cache',
}),
})

Логика в компоненте:

const [downloadFile, {}] =

const downloadHandler = async (e) => {
e.stopPropagation()
const response = await downloadFile({ _id })
const downloadURL = response.data
const link = document.createElement('a')
link.href = downloadURL
link.download = name

link.click()
link.remove()
}

blgarOk
Автор

У меня не работает.... 400 Bad request
P.S. Скачал код автора, подставил свои конфиги, и то же самое...

LapmXU
Автор

ребята что мне делать если я ничего не понимаю я просто все копирую помогите с этим

AlexanderTM
welcome to shbcf.ru