我正在构建一个Web工具,允许用户使用他们的Web浏览器将PDF上传到服务器。服务器基于Python(Paste + Pyramid)。
我现在遇到的问题如下:如果用户上传了一个相当大的文件(比方说100 MB)并且在完成之前取消了上传,我的服务器上的处理程序代码仍会被调用(而不是请求被中止)。
问题在于request.POST['myfile'].file
在发生这种情况时是不完整的。这实际上意味着如果我只是将PDF文件写入服务器上的某个位置就会损坏PDF文件。
当我观察服务器的日志时,它会在粘贴服务器中显示“损坏的管道”异常;但我不知道如何捕获该异常,并阻止我的视图/处理程序代码执行和存储不完整的文件。
答案 0 :(得分:2)
似乎paster HTTP服务器没有正确验证上传的表单数据,只是将请求传递给WSGI管道,即使用户关闭了连接(HTTP POST)。
我通过简单地设置NGINX作为反向代理解决了这个问题。这也增加了一些安全性,因为它可能比贴纸更好地进行测试。
我的主要问题是我使用的是runserver
(内置的manage.py网络服务器)。经过一些试验和错误后,我们最终使用了WSGI。
更具体地说,uWSGI和Nginx作为网络服务器。静态内容由Nginx直接提供,而动态页面通过uWSGI传输,并由Python Web应用程序处理。
答案 1 :(得分:0)
除非您正在做一些花哨的事情(比如跟踪上传进度等),否则在整个文件上传之前不应调用您的Pylons控制器。