我正在使用Flask-uploads将文件上传到我的 Flask 服务器。允许的最大大小是通过使用设置的flaskext.uploads.patch_request_class(app, 16 * 1024 * 1024)。
我的客户端应用程序(一个单元测试)使用请求来发布一个很大的文件。
我可以看到我的服务器返回一个带有 status 的 HTTP 响应413: Request Entity Too Large。但是客户端在请求代码中引发异常
ConnectionError: HTTPConnectionPool(host='api.example.se', port=80): Max retries exceeded with url: /images (Caused by <class 'socket.error'>: [Errno 32] Broken pipe)
Run Code Online (Sandbox Code Playgroud)
我的猜测是服务器断开接收套接字并将响应发送回客户端。但是当客户端收到损坏的发送套接字时,它会引发异常并跳过响应。
问题:
更新
这是一个重现我的问题的简单示例。
服务器.py
from flask import Flask, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 1024
@app.route('/post', methods=('POST',))
def view_post():
return request.data
app.run(debug=True) …Run Code Online (Sandbox Code Playgroud) 在这个论坛上看了几个星期后,我觉得是时候做我的第一篇文章.
我目前正在重读Code Complete.我认为这是自上次以来的15年,我发现我仍然无法编写代码;-)
无论如何,在Code Complete中的第138页,你会发现这个编码恐怖的例子.(我删除了一些代码)
class Emplyee {
public:
FullName GetName() const;
Address GetAddress() const;
PhoneNumber GetWorkPhone() const;
...
bool IsZipCodeValid( Address address);
...
private:
...
}
Run Code Online (Sandbox Code Playgroud)
史蒂夫认为不好的是功能松散相关.或者他写道:"检查邮政编码,电话号码或工作分类的员工和例程之间没有逻辑联系"
好的,我完全赞同他.也许类似下面的例子更好.
class ZipCode
{
public:
bool IsValid() const;
...
}
class Address {
public:
ZipCode GetZipCode() const;
...
}
class Employee {
public:
Address GetAddress() const;
...
}
Run Code Online (Sandbox Code Playgroud)
检查拉链是否有效时,您需要执行类似的操作.
employee.GetAddress().GetZipCode().IsValid();
Run Code Online (Sandbox Code Playgroud)
对于得墨忒耳法而言,这并不好.
因此,如果你想删除三个点中的两个,你需要使用委托和一些像这样的包装函数.
class ZipCode
{
public:
bool IsValid();
}
class Address {
public:
ZipCode GetZipCode() const;
bool IsZipCodeValid() {return GetZipCode()->IsValid()); …Run Code Online (Sandbox Code Playgroud)