文件也在 pythonanywhere 服务器和用户笔记本电脑/PC 上下载。如何限制在 pythonanywhere 服务器上写入

Posted

技术标签:

【中文标题】文件也在 pythonanywhere 服务器和用户笔记本电脑/PC 上下载。如何限制在 pythonanywhere 服务器上写入【英文标题】:Files are being downloaded at pythonanywhere server and user laptop/pc too. How to restrict to write at pythonanywhere server 【发布时间】:2021-05-28 15:34:56 【问题描述】:

问题是我使用 django 在 pythonanywhere 托管。视频也在 pythonanywhere 服务器和用户/客户端系统下载。这就是我使用 os.删除(路径)。下载后从服务器中删除。

有什么方法可以在 pyhtonanywhere 服务器上不写入文件。所以我不使用 os.remove(path)。 如何限制在 pythonanywhere 服务器上写入。只能在用户系统下载。

def fb_download(请求):

link = request.GET.get('url')
html= requests.get(link)
try:       
    url= re.search('hd_src:"(.+?)"',html.text)[1]
except:
    url= re.search('sd_src:"(.+?)"',html.text)[1]



path=wget.download(url, 'Video.mp4')
response=FileResponse(open(path, 'rb'), as_attachment=True)
os.remove(path)
return response

【问题讨论】:

【参考方案1】:

如果我理解正确,您正在尝试从浏览器获取包含 URL 的请求。然后,您访问该 URL 的页面并从中提取另一个 URL,然后您希望将第二个 URL 的内容(视频)呈现给浏览器。

您这样做的方式是将文件下载到服务器,然后将其作为文件附件提供给浏览器。

如果你这样做,那么没有办法避免在服务器上写入文件;实际上,您现在执行此操作的方式可能会出现问题,因为您在将响应返回给浏览器之前就删除了文件,因此可能存在(取决于文件删除的处理方式以及 FileResponse 是否缓存文件的内容)是没有文件发送回浏览器的情况。

但另一种可行的方法是向 URL 发送重定向响应——变量 url 中的那个——就像这样,根本不下载它:

def fb_download(request):

    link = request.GET.get('url')
    html= requests.get(link)
    try:       
        url= re.search('hd_src:"(.+?)"',html.text)[1]
    except:
        url= re.search('sd_src:"(.+?)"',html.text)[1]
    
    return redirect(url)

通过这样做,下载发生在浏览器而不是服务器上。

【讨论】:

感谢 Giles 的回复。在没有 FileResponse 的情况下,这不会自动下载。我在问一个技巧是它应该自动下载还是浏览器应该询问下载位置。 同样的问题在这里..请建议这对我来说是最大的麻烦。 path=YouTube(url).streams.filter(res=res).first().download(DOWNLOAD_DIR) response=FileResponse(open(path, 'rb'), as_attachment=True) os.remove(path) 返回响应 对不起,我不明白您所说的“在没有 FileResponse 的情况下自动下载”是什么意思【参考方案2】:

我不懂javascript真的很好, 但我想如果你将文件下载到服务器 然后就可以使用JS下载文件使用了 我认为你可以使用

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于文件也在 pythonanywhere 服务器和用户笔记本电脑/PC 上下载。如何限制在 pythonanywhere 服务器上写入的主要内容,如果未能解决你的问题,请参考以下文章

在 Pythonanywhere 上的烧瓶中替代 send_file()?

Pythonanywhere 'staticfiles' 不是有效的标记库:找不到模板库静态文件

pythonanywhere 部署 webpy

连接到 PythonAnywhere SQL Server 的问题

将mysql与pythonanywhere一起使用时出现错误4

访问主页时出现 Pythonanywhere 错误