Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 下载-请求用户输入文件名时如何处理打开的网络连接?_Qt_Http_Browser_Download_Qtwebkit - Fatal编程技术网

Qt 下载-请求用户输入文件名时如何处理打开的网络连接?

Qt 下载-请求用户输入文件名时如何处理打开的网络连接?,qt,http,browser,download,qtwebkit,Qt,Http,Browser,Download,Qtwebkit,我用写一个小浏览器为什么。现在,当用户单击浏览器无法呈现的链接时,我必须下载它,但我得到的网络回复已经是一个打开的连接 现在,在我知道将文件写入何处之前,我想向用户请求一个文件名,这就是我的问题所在。到目前为止,我可以想到这些方法: 在输入文件名之前不下载任何内容->服务器可能会在几秒钟后关闭连接。 当输入文件名->时,只需重新执行请求,可能会导致很多问题,例如,使用DRM,您可能会在站点上下载N次此文件。 只需下载到RAM->RAM就可以很快填满内存。我这里有一个250Mbit的连接,所以如果

我用写一个小浏览器为什么。现在,当用户单击浏览器无法呈现的链接时,我必须下载它,但我得到的网络回复已经是一个打开的连接

现在,在我知道将文件写入何处之前,我想向用户请求一个文件名,这就是我的问题所在。到目前为止,我可以想到这些方法:

在输入文件名之前不下载任何内容->服务器可能会在几秒钟后关闭连接。 当输入文件名->时,只需重新执行请求,可能会导致很多问题,例如,使用DRM,您可能会在站点上下载N次此文件。 只需下载到RAM->RAM就可以很快填满内存。我这里有一个250Mbit的连接,所以如果我花30秒输入一个文件名,可能会占用1GB的RAM。 下载到临时文件,直到用户输入文件名,然后复制并删除临时文件。 最后一种方法对我来说似乎是最干净的,这似乎也是Firefox/Chrome所做的。然而,我正在努力寻找文档或代码示例(理想情况下是Qt/PyQt),它们以正确的方式实现了这一点,因为可能有一些特殊情况需要处理


我走对了吗?

在阅读了大量有关mozilla bug的评论后,我得出结论,慢慢下载到RAM是最好的选择

我通过在QNetworkReply上设置一个固定的读取缓冲区大小来实现这一点,然后用一个QTimer缓慢地读取RAM缓冲区中的另一个缓冲区


可以找到PyQt实现。

我认为最简单的方法是创建一个QTemporaryFile,向其中写入数据,直到用户指定文件名,然后关闭它,调用QDir::rename移动它,然后打开新文件并继续写入。