【问题标题】:Accessing users Download folder in python在python中访问用户下载文件夹
【发布时间】:2020-03-01 12:51:26
【问题描述】:

我在 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})

此代码只是给出基本实现的示例

【问题讨论】:

  • @PedroLobito 请查看它
  • 您的代码与您的问题不符。 Path = os.path.expanduser("~") + "/Downloads/",无处可寻。
  • 只是打字错误。试着理解

标签: python django


【解决方案1】:

您不能访问用户Downloads 文件夹,因为它是浏览器设置。用户可以在任何他想要的地方下载文件,而你不能影响它。

如果您制作的是客户端应用程序,而不是网络服务器,您可以在任何地方下载您想要的所有内容。但是您创建的服务器应用程序无法指定下载文件夹。

【讨论】:

  • 它至少应该在用户本地计算机上下载。我不在乎它是在下载目录还是桌面目录,甚至是 C 盘
  • @theDude 下载到服务器目录?
  • 是在服务器/home/SERVER USER NAME/Download
【解决方案2】:

如果我正确理解您的问题,我猜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'),因为启动该进程的用户是由网络服务器使用的,程序无法找出您的真实身份。它将始终返回有关网络服务器使用的用户的数据。

【讨论】:

  • 它不是一个基于云的应用程序。我是编程新手,并设法使用 pytube 构建了一个简单的视频下载器。它在本地主机上运行良好,但在生产中它没有下载离子所需的位置。它只是简单的应用程序,所以我不想创建用户数据库和用户登录页面。复制粘贴 youtube url 点击下载按钮,它应该下载视频。我可以使用 os.getenv('username') 吗?
  • “用户名”未定义
  • 好吧,定义用户名。添加用户名=“您的用户名”。
  • 如果我从另一台电脑浏览它会怎样?或者如果其他人试图从另一台电脑下载
  • 那么,你需要一个特定的用户名,否则你将无法识别用户。查看“基于云的应用程序”了解更多信息。
猜你喜欢
  • 2022-01-26
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 2021-11-02
  • 2018-04-29
相关资源
最近更新 更多