Qt 下载-请求用户输入文件名时如何处理打开的网络连接?
我用写一个小浏览器为什么。现在,当用户单击浏览器无法呈现的链接时,我必须下载它,但我得到的网络回复已经是一个打开的连接 现在,在我知道将文件写入何处之前,我想向用户请求一个文件名,这就是我的问题所在。到目前为止,我可以想到这些方法: 在输入文件名之前不下载任何内容->服务器可能会在几秒钟后关闭连接。 当输入文件名->时,只需重新执行请求,可能会导致很多问题,例如,使用DRM,您可能会在站点上下载N次此文件。 只需下载到RAM->RAM就可以很快填满内存。我这里有一个250Mbit的连接,所以如果我花30秒输入一个文件名,可能会占用1GB的RAM。 下载到临时文件,直到用户输入文件名,然后复制并删除临时文件。 最后一种方法对我来说似乎是最干净的,这似乎也是Firefox/Chrome所做的。然而,我正在努力寻找文档或代码示例(理想情况下是Qt/PyQt),它们以正确的方式实现了这一点,因为可能有一些特殊情况需要处理Qt 下载-请求用户输入文件名时如何处理打开的网络连接?,qt,http,browser,download,qtwebkit,Qt,Http,Browser,Download,Qtwebkit,我用写一个小浏览器为什么。现在,当用户单击浏览器无法呈现的链接时,我必须下载它,但我得到的网络回复已经是一个打开的连接 现在,在我知道将文件写入何处之前,我想向用户请求一个文件名,这就是我的问题所在。到目前为止,我可以想到这些方法: 在输入文件名之前不下载任何内容->服务器可能会在几秒钟后关闭连接。 当输入文件名->时,只需重新执行请求,可能会导致很多问题,例如,使用DRM,您可能会在站点上下载N次此文件。 只需下载到RAM->RAM就可以很快填满内存。我这里有一个250Mbit的连接,所以如果
我走对了吗?在阅读了大量有关mozilla bug的评论后,我得出结论,慢慢下载到RAM是最好的选择 我通过在QNetworkReply上设置一个固定的读取缓冲区大小来实现这一点,然后用一个QTimer缓慢地读取RAM缓冲区中的另一个缓冲区
可以找到PyQt实现。我认为最简单的方法是创建一个QTemporaryFile,向其中写入数据,直到用户指定文件名,然后关闭它,调用QDir::rename移动它,然后打开新文件并继续写入。