Загрузите видео YouTube на компьютер пользователя на сайте Django - PullRequest
0 голосов
/ 12 апреля 2020

В значительной степени то, что говорит вопрос. Прямо сейчас у меня есть эта функция, использующая pytube:

    def download(request, video_url):
        url='http://www.youtube.com/watch?v='+str(video_url)
        homedir = os.path.expanduser("~")
        dirs = homedir + '/Downloads'
        download = YouTube(url).streams.first().download(dirs)   
        return redirect('../../')

Но это загружает видео в каталог /Downloads/ в pythonanywhere - сайте, на который я загрузил свой проект.

Как загрузить видео на компьютер пользователя? Решение не должно использовать пакет pytube, так как я просто хочу получить ответ. Было бы здорово, если бы вы сказали мне, как загрузить файл как файл .mp3.

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

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Проблема

Когда вы запускаете программу на удаленном компьютере (это ваш сервер на pythonanywhere), тогда все операции происходят на этом удаленном компьютере, а не на компьютере пользователя.

Поэтому , когда вы загружаете что-то на удаленный компьютер, оно будет загружено на удаленный компьютер (pythonanywhere).

Решение

Для выполнения ваших требований (загрузите файл на компьютер пользователя, а не сервер), вы, вероятно, сделали бы что-то вроде этого:

  • Загрузите файл с YouTube локально (как вы в настоящее время делаете с YouTube....download().
  • Отправьте файл пользователю. Это то, что решение Гагана Аггарвала пытается сделать с django FileResponse

Зачем эта работа?

Каждый раз, когда вы посещаете На странице вашего браузера ваше приложение django выполняет примерно следующее:

  • Получает запрос от пользователя
  • Затем возвращает ответ

Обычно Django приложение вернет страницу HTML. Но страница HTML - это просто файл, как и ваше видео с YouTube, которое вы загружаете. Затем вы можете отправить видеофайл вместо веб-страницы. Затем браузер пользователя попытается открыть этот файл.

Как выбрать местоположение для загрузки?

Ваше Django приложение не может выбрать место загрузки для пользователя компьютер. Это было бы опасно, если бы любой веб-сайт мог просто загружать файлы на ваш компьютер в любом месте.

Однако, когда вы отправляете файл пользователю, они могут выбрать, где его загрузить.

Если вы посмотрите документацию для FileResponse , вы увидите, что вы можете передать параметр as_attachment=True.

Это заставит Django отправить файл как «вложение» Это означает, что он попытается скачать его, а не открывать. Это побудит пользователя выбрать место загрузки файла.

1 голос
/ 14 апреля 2020

Я также выпустил ту же проблему, но я уменьшил эту проблему на 80 процентов ... Итак, посмотрите мое решение, надеюсь, вам поможет это решение:)

первый модуль импорта

from django.http import FileResponse

Тогда код ...

return FileResponse(open(YouTube(url).streams.first().download(skip_existing=True),'rb'))

Вы не можете использовать функцию возврата перенаправления, вы можете использовать функцию FileResponse

...