Python 3.x 308使用POST将文件上载到Flask应用程序时重定向

Python 3.x 308使用POST将文件上载到Flask应用程序时重定向,python-3.x,curl,flask,Python 3.x,Curl,Flask,我正在Flask中构建一个小型服务器应用程序,这是我正在进行的一个项目的一部分。该功能的一部分是能够上传一个小文件的说明,供其中一个关键喷油器下载。每个密钥注入器都有一个与客户端相对应的名称(“”),该文件通过POST请求上载到服务器 下面的清单是Flask代码 @app.route('/upload/instructions/<ducky_name>/', methods = ['POST']) def upload_Instruction(ducky_name): fil

我正在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"
然后我得到一个308重定向,文件没有上传。这是我第一次用这种方式上传文件,也是我第一次使用Flask


谢谢

您在curl请求中使用的URL不像在Flask路由中那样具有尾部斜杠。在这种情况下,框架使用斜杠将您重定向到路由(请参阅)。因此,只需添加尾部斜杠:

curl -X POST -d @test http://127.0.0.1:5000/upload/instructions/test1/

Flask使用308 HTTP响应代码而不是更常见的301来在重定向期间保留请求方法和正文。

Flask
使用
werkzeug.routing.Rule
,默认情况下启用
严格斜杠
,访问没有尾部斜杠的分支URL将重定向到附加斜杠的URL。导致响应308(永久重定向)

如果要支持这两种路由,请执行以下操作:

  • /upload/instructions/
  • /upload/instructions/
只需将app.route设置为
strict\u slashes=False
,如下所示:

@app.route('/upload/instructions/<ducky_name>/', methods = ['POST'], 
            strict_slashes=False)
def upload_Instruction(ducky_name):
    pass
@app.route('/upload/instructions/',methods=['POST'],
严格(斜杠=假)
def upload_指令(ducky_名称):
通过

请参阅:

谢谢,并将
请求.file
更改为
请求.data
修复了它。ThanksAnd@MartinHarvey您应该接受这个答案,或者至少在您的“谢谢”之外对它进行升级。即使只是为了测试而将超长utf-8字符串作为参数传输,摆脱API中简单的预告片斜杠也能帮到我。与客户的斜杠匹配也有帮助,但我得到了308分,然后得到了200分(我想)。有意思,我没有时间玩了,但是谢谢你的帮助
@app.route('/upload/instructions/<ducky_name>/', methods = ['POST'], 
            strict_slashes=False)
def upload_Instruction(ducky_name):
    pass