Flask 文件上传返回错误 405 方法不允许

Posted

技术标签:

【中文标题】Flask 文件上传返回错误 405 方法不允许【英文标题】:Flask file upload returns error 405 method not allowed 【发布时间】:2021-08-07 05:13:07 【问题描述】:

下面的代码是用于上传站点中事务的图像的端点正在工作,但由于某种原因,当文件附加到请求时它会不断返回 405 错误,但在没有文件时会正常工作。因此代码在本地和另一台服务器(使用类似的站点代码)上运行,但在控制服务器上运行。

@bp.route("/transaction/<int:transaction_id>/image", methods=['PUT'])
def upload_image_ex(transaction_id):
    transaction = Transaction.query.get(transaction_id)
    
    if not transaction:
        return jsonify(status='failed', message='Transaction Not Found!')
    if transaction.status != 0:
        return jsonify(status='failed', message='Transaction No Longer Pending!')

    if 'images[]' not in request.files:
        return jsonify(status='failed', message='No image uploaded!')

    files = request.files.getlist('images[]')

    for file in files:
        print("dayer")
        unique_filename = str(uuid.uuid4()) + '.' + \
            file.filename.rsplit('.', 1)[1].lower()
        print("dayer")
        file.save(os.path.join(Config.POST_UPLOAD_FOLDER, unique_filename))
        print("dayer")
        save_image(
            unique_filename,
            file,
            Config.POST_UPLOAD_FOLDER,
            Config.BANNER_SIZE,
            isByte=False
        )

        img = TransactionImage()
        img.img = unique_filename
        img.transaction_id = transaction_id
        db.session.add(img)

    db.session.commit()

    return jsonify(
        status='success',
        message='Transaction Image Uploaded',
        data=TransactionSchema().dump(transaction)
    )

【问题讨论】:

【参考方案1】:
    检查你的前端调用,如果方法是PUT。 检查服务器上的反向代理,如 nginx,如果它改变了调用的位置或方法。 尝试将POSTPATCH ... 方法添加到您的路由中以解决问题。 @bp.route("/transaction/&lt;int:transaction_id&gt;/image", methods=['PUT', 'POST', 'PATCH'])

【讨论】:

以上是关于Flask 文件上传返回错误 405 方法不允许的主要内容,如果未能解决你的问题,请参考以下文章

405 上传文件时方法不允许

不允许使用 GET405 方法(JavaScript 和 Flask)

发送文件返回 405(方法不允许)

尝试在 Rails 中发布文件时出现 405 错误

尝试使用 blueimp jquery 上传小部件上传时出现 405(不允许的方法)错误

Flask - 将参数传递给 URL - 405 错误