如何在 flask 路由中传递 url 参数(url 在浏览器中打开时自动下载 pdf)

How to pass a url parameter(url which auto downloads a pdf on opening in browser) in a flask route

我目前正在我的代码中对我的 pdf 下载 url 进行硬编码,所以当我输入“http://127.0.0.1:5000/" in my browser, the pdf downloads to the specified directory. But when I want to make this dynamic so that I can enter any url after "http://127.0.0.1:5000/”并且它应该保存到我指定的目录时,它不起作用并抛出 404 错误.

当我尝试使路由动态化以便它可以处理任何下载时的示例代码 link。这会引发 404 错误:

import urllib
import requests
import ectd
from ectd import convert
from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)  

#@app.route("/")
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def download_file(download_url):
    #download_url="https://ptenantectdtest.blob.core.windows.net/documentcontainer/0bbc072c-9114-4ff5-9bc7-dbcc86bff54d?sv=2015-12-11&sr=b&sig=bh8gCr6cZIxr2C%2FwB6pB6u%2BxpZFVWZ6S3GWw0QZCqyo%3D&st=2019-07-22T06%3A28%3A56Z&se=2019-07-23T06%3A38%3A56Z&sp=r&rscd=attachment%3B%20filename%3D%20%225ca21af9-5b67-45f8-969c-ae571431c665.pdf%22"
    response = urllib.request.urlopen(download_url)
    file = open('D:/xyz_.pdf', 'wb')
    file.write(response.read())
    file.close()


    return 'ABC'


if __name__ == '__main__':
     app.run()

当我对有效路径进行硬编码并将文件保存在指定目录中时的示例代码:

    @app.route("/")
    def download_file():
        download_url="https://ptenantectdtest.blob.core.windows.net/documentcontainer/0bbc072c-9114-4ff5-9bc7-dbcc86bff54d?sv=2015-12-11&sr=b&sig=bh8gCr6cZIxr2C%2FwB6pB6u%2BxpZFVWZ6S3GWw0QZCqyo%3D&st=2019-07-22T06%3A28%3A56Z&se=2019-07-23T06%3A38%3A56Z&sp=r&rscd=attachment%3B%20filename%3D%20%225ca21af9-5b67-45f8-969c-ae571431c665.pdf%22"
        response = urllib.request.urlopen(download_url)
        file = open('D:/xyz_.pdf', 'wb')
        file.write(response.read())
        file.close()


        return 'ABC'
if __name__ == '__main__':
         app.run()

任何人都可以告诉我当我尝试使我的路线动态化而不是对 pdf 下载进行硬编码时出现了什么问题 link

我发现这段代码有问题:

@app.route('/<path:path>')
def download_file(download_url):
    #download_url="https://ptenantectdtest.blob.core.windows.net/documentcontainer/0bbc072c-9114-4ff5-9bc7-dbcc86bff54d?sv=2015-12-11&sr=b&sig=bh8gCr6cZIxr2C%2FwB6pB6u%2BxpZFVWZ6S3GWw0QZCqyo%3D&st=2019-07-22T06%3A28%3A56Z&se=2019-07-23T06%3A38%3A56Z&sp=r&rscd=attachment%3B%20filename%3D%20%225ca21af9-5b67-45f8-969c-ae571431c665.pdf%22"
    response = urllib.request.urlopen(download_url)

如果我没记错,你需要在路由和函数中使用相同的变量名,例如:

@app.route('/<path:url_path>')
def download_file(url_path):

然后你可以做:

response = urllib.request.urlopen(url_path)

不确定(只是没看到在路由和函数中使用另一个 var 名称),未测试,如果有帮助请告诉我!

如果没有帮助,也许可以进行一些调试以查看代码中出现问题的位置。