Доступ к пользователям Скачать папку в python - PullRequest
0 голосов
/ 01 марта 2020

Я запустил простое приложение для загрузки видео в django с сервером apache2. Я пытался получить доступ к локальному каталогу загрузки пользователей с помощью Path = os.path.expanduser("~") + "/Downloads/". Но всякий раз, когда кто-то пытается загрузить его загрузку видео в папке серверов, т.е. /home/SERVER USER NAME/Download, но не пользователи скачать каталог. Как я могу сделать так, чтобы он загружался внутри локального пользователя? Скачать каталог?

views.py

def download(request):
    MusicPath = os.path.expanduser("~") + "/Downloads/"
    if request.method == 'GET':

        context = {
            'videos_1080': PY.streams.get_by_itag('137'),
            'videos_720': PY.streams.get_by_itag('22'),
            'videos_normal': PY.streams.filter(progressive=True, subtype='mp4').first()
        }
        return render(request, "youtube/download.html",context)

    if request.method == 'POST':
            videos = PY.streams.filter(progressive=True, subtype='mp4').first()
            videos.download(MusicPath)
            messages.success(request, 'Video has been successfully downloaded !')
            return redirect('home')
        return render(request, "youtube/download.html", {"title": PY.title, "id": PY.video_id, 'views': PY.views})

Этот код является просто примером, дающим основы c реализация

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Вы не можете получить доступ к папке пользователя Downloads, поскольку это настройка браузера. Пользователь может загрузить файл где угодно, и вы не можете на него повлиять.

Если вы создали клиентское приложение, а не веб-сервер, вы можете загрузить все, что захотите, куда угодно. Но вы создали серверное приложение, которое не может указать папку для загрузки.

0 голосов
/ 01 марта 2020

Если я правильно понимаю вашу проблему, я думаю, os.path.expanduser("~") даст вам путь к пользователю, используемому WebServer. Например, если вы используете Apache2, пользователь по умолчанию будет www-data, поэтому os.path.expanduser("~") вернет /home/www-data/Downloads. (Который по умолчанию не существует).

В случае, если вы хотите использовать папку текущего пользователя, я бы порекомендовал собрать имя пользователя текущего человека. path = "home/{}/Downloads".format(username). Еще лучше, если вы используете базу данных или файл, поместите весь загруженный контент в одну папку, и вы продолжаете отслеживать владельца видео из-за несуществующих пользователей, папок.

В случае это облачное приложение, я бы порекомендовал

  • Создать страницу входа
  • Загрузить видео в одну папку
  • Отслеживать владельца файла в базу данных или текстовый файл

РЕДАКТИРОВАТЬ

В случае, если это не облачное приложение, и оно должно загрузить видео в папку загрузки, просто Жесткий код вашего пути в источник. (Не забывайте разрешения)

Затем жестко закодируйте ваш путь Загрузок в источник.

Измените

MusicPath = os.path.expanduser("~") + "/Downloads/"

на

MusicPath = "/home/{}/Downloads/".format(username)

Где username - ваше имя пользователя.

Вы не можете использовать os.path.expanduser("~") или os.getenv('username'), потому что пользователь, который запускает процесс, используется веб-сервером, и программа никак не может узнать, кто вы на самом деле. Он всегда будет возвращать данные о пользователе, используемом веб-сервером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...