我有一个REST前端使用Python/Bottle编写,它处理文件上传,通常是大型文件。API是这样的:
客户端以文件作为负载发送PUT。除此之外,它还发送日期和授权头。这是一种防止重播攻击的安全措施——使用目标url、日期和其他一些东西,用一个临时密钥对请求进行签名
现在问题来了。如果提供的日期在15分钟的给定日期时间窗口中,则服务器接受该请求。如果上传需要足够长的时间,它将长于允许的时间增量。现在,请求授权处理是使用decoratoronbottleview方法完成的。但是,除非上传完成,否则bottle不会启动分派过程,因此验证在较长的上传上失败。
我的问题是:有没有办法向bottle或WSGI解释如何立即处理请求并在上传过程中进行流式传输?出于其他原因,这对我也很有用。或者其他解决办法?在我写这篇文章的时候,我想到了WSGI中间件,但是,我还是希望获得外部的洞察力。
我愿意切换到Flask,甚至其他Python框架,因为剩下的前端相当轻量级。
谢谢你
我建议在前端将传入的文件分成较小的块。我这样做是为了在Flask应用程序中实现大文件上传的暂停/恢复功能。
使用Sebastian Tschan's jquery plugin,可以通过在初始化插件时指定
maxChunkSize
来实现分块,如下所示:现在,当上传大文件时,客户端将发送多个请求。您的服务器端代码可以使用
Content-Range
头将原始大文件修补回一起。对于烧瓶应用程序,视图可能类似于:对于您的特定应用程序,您只需确保每个请求仍然发送正确的身份验证头。
希望这有帮助!我在这个问题上挣扎了一段时间;)
当使用plupload解决方案时可能是这样的:
在这种情况下,flask python代码类似于:
Plupload总是以完全相同的顺序发送数据块,从第一个到最后一个,所以您不必费心于seek或类似的东西。
相关问题 更多 >
编程相关推荐