3

我正在构建一个网络工具,允许用户使用他们的网络浏览器将 PDF 上传到服务器。服务器基于 Python(Paste + Pyramid)。

我现在遇到的问题如下:如果用户上传了一个相当大的文件(比如说 100 MB)并且他们在上传完成之前取消了上传,我在服务器上的处理程序代码仍然被调用(而不是请求被中止)。

问题是request.POST['myfile'].file发生这种情况时它是不完整的。这实际上意味着如果我只是将 PDF 文件写入服务器上的某个位置,它就会损坏。

当我查看服务器的日志时,它在粘贴服务器中显示“管道损坏”异常;但是我不知道如何捕获该异常并让它阻止我的视图/处理程序代码执行和存储不完整的文件。

4

2 回答 2

2

似乎粘贴 HTTP 服务器没有正确验证上传的表单数据,并且即使连接(HTTP POST)被用户关闭,也只是将请求传递到 WSGI 管道。

我通过简单地将NGINX设置为反向代理来解决这个问题。这也增加了一些安全优势,因为它可能比 paste 更好地测试。


更新:

我的主要问题是我正在使用runserver(manage.py 的内置 Web 服务器)。经过一些试验和错误,我们最终使用了 WSGI。

更具体地说,uWSGINginx作为 Web 服务器。静态内容由 Nginx 直接提供,而动态页面通过 uWSGI 传输并由 Python Web 应用程序处理。

于 2011-07-24T14:39:44.450 回答
0

除非您正在做一些花哨的事情(例如跟踪上传进度等),否则在整个文件上传之前不应调用您的 pylons 控制器。

于 2011-07-17T09:00:31.430 回答