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

问题描述

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

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

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]



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

解决方法

如果我理解正确,您正试图从浏览器获取包含 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)

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