我正在Flask中构建一个小型服务器应用程序,作为我正在进行的项目的一部分。部分功能是能够上传一个小文件的指令,供其中一个密钥注入器下载。每个密钥注入器都有一个名称(“”),对应于一个客户端,文件通过POST请求上传到服务器。
下面是Flask代码。
@app.route('/upload/instructions/<ducky_name>/', methods = ['POST'])
def upload_Instruction(ducky_name):
file = request.files()
path = os.getcwd() +"/files/" + ducky_name
with open(path, "w") as f:
f.write(file)
print(f)
f.close()
return "Success"
我用curl命令上传文件。
curl -X POST -d @test http://127.0.0.1:5000/upload/instructions/test1
这是我第一次用这种方式处理以POST方式上传文件,也是我第一次使用Flask。
谢谢
2条答案
按热度按时间lyfkaqu11#
你在curl请求中使用的URL不像Flask路由中那样有结尾的斜杠。在这种情况下,框架会将你重定向到带有斜杠的路由(参见文档条目)。所以只需要添加结尾的斜杠:
Flask使用308 HTTP响应代码而不是更常见的301来在重定向期间保留请求方法和主体。
rjzwgtxy2#
Flask
使用werkzeug.routing.Rule
,默认启用strict_slashes
,访问没有斜杠的分支URL将重定向到附加斜杠的URL。这将导致响应308(永久重定向)。如果您希望支持这两种路由:
/upload/instructions/<ducky_name>/
/upload/instructions/<ducky_name>
只需使用
strict_slashes=False
设置app.route,如下所示:参考:https://werkzeug.palletsprojects.com/en/1.0.x/routing/