Как скачать файл из публичной папки Яндекс.Диск
Есть приложение с фронтом на Vue и с бэком на Firebase и есть публичная папка на Яндекс Диске, с задачей вывода папок и файлов справился с помощью REST API. Но со скачиванием файлов есть проблемы.
Делаю запрос на https://cloud-api.yandex.net/v1/disk/public/resources получаю папки и файлы, у файлов есть поле file со ссылкой на скачивание, но при попытке скачать получаю 403.
Ответы (3 шт):
тебе не даст это сделать политика конфиденциальности Яндекса скорее всего
Рабочий код выглядит так:
import requests
base_url = 'https://cloud-api.yandex.net/v1/disk/public/resources/download?'
link = 'https://disk.yandex.ru/d/SvcMXspUAGSb6Q' # Сюда вписываете вашу ссылку
# Получаем загрузочную ссылку
final_url = base_url + 'public_key=' + link
response = requests.get(final_url)
download_url = response.json()['href']
# Загружаем файл и сохраняем его
download_response = requests.get(download_url)
with open('downloaded_file.txt', 'wb') as f: # Здесь укажите нужный путь к файлу
f.write(download_response.content)```
100% рабочий вариант на данный момент на JS:
const BASE_PUBLIC_YANDEX_DISK_URL_PREFIX =
'https://cloud-api.yandex.net/v1/disk/public/resources/download?public_key='
async function getYandexPublicFile(url) {
try {
let response = await fetch(BASE_PUBLIC_YANDEX_DISK_URL_PREFIX + url, { referrerPolicy: 'no-referrer' })
const json = await response.json()
response = await fetch(json.href)
const fileContent = await response.text() // для плоского текста
// или response.json() для плоского текста в формате JSON
// или response.arrayBuffer() для бинарных данных
// далее делаем с содержимым файла, что нужно, например возвращаем
return fileContent
} catch (error) {
console.error('Load error', error)
}
}
В параметре url передаём публичную ссылку на файл в Яндекс Disk, полученную путём нажатия на "Поделиться", при условии, что к файлу не применялись специальные права доступа для конкретных юзеров Яндекса, т.е. файл по ссылке может скачать любой, кто её знает.
Небольшое уточнение:
Если сайт, на котором размещен данный скрипт, НЕ HTTPS (т.е. небезопасное подключение), важно отключить проверку referrer, иначе будет возвращена ошибка 403 с сообщением "Invalid referrer".
Вероятно, если всё ок, т.е. подключение безопасное, скрипт размещен на сайте https://..., отключение заголовка Referer не потребуется.