Qt5:下载文件而不保存到硬盘
Posted
技术标签:
【中文标题】Qt5:下载文件而不保存到硬盘【英文标题】:Qt5: download a file without saving to HDD 【发布时间】:2015-04-06 13:24:50 【问题描述】:我正在尝试在 Qt5 中下载文件,但下载后该文件不得位于 HDD 上。 澄清一下>我的应用程序将使用下载的文件来更新某些固件,我不希望下载的更新保留在用户的硬盘上,因为它可能会被盗。
所以,我正在尝试从QNetworkReply*
创建一个QFile
,但没有将其保存到硬盘上的某个路径。
我正在使用QNetworkAccessManager
下载文件并将数据存储到QNetworkReply
。我以前总是用QNetworkReply*
制作QFile
,但现在我不能这样做了。
我找到了 QTemporaryFile
类,其中一个文件在使用后立即被删除,但这仍然给用户留下了一些稍后查找文件的选项。
我尝试将 QNetworkReply*
类型转换为 QFile
,但未能使其正常工作,似乎 QFile 不能在 HDD 上没有路径。
有没有人知道如何做到这一点,以及如何做到这一点?
谢谢大家。
【问题讨论】:
这个文件有多大?你打算用它的内容做什么? 【参考方案1】:再次不确定您的预期最终用例,但由于您的数据足够小以保存在内存中,您可以使用QByteArray 或QBuffer 并从您的QNetworkReply
写入它。 QBuffer
为QByteArray
提供了一个QIODevice
接口,因此您使用它可能会更容易一些。
确保打开QBuffer
进行读/写。请参阅下面 Qt 文档中的简单示例,http://doc.qt.io/qt-5/qbuffer.html#details,如下:
QBuffer buffer;
char ch;
buffer.open(QBuffer::ReadWrite);
buffer.write("Qt rocks!");
buffer.seek(0);
buffer.getChar(&ch); // ch == 'Q'
buffer.getChar(&ch); // ch == 't'
buffer.getChar(&ch); // ch == ' '
buffer.getChar(&ch); // ch == 'r'
这应该允许您读取数据并根据需要使用,而无需在系统上创建文件。
【讨论】:
谢谢,我设法将所有下载的内容放入缓冲区,然后从中读取。现在我需要弄清楚如何将缓冲区发送到不同的插槽......再次感谢。 所以,只是在这里发布解决方案......我使用了 QBuffer 类,制作了一个 QBuffer* 并通过信号和插槽发送它,一切似乎都在工作。所有功劳归功于@Matthew以上是关于Qt5:下载文件而不保存到硬盘的主要内容,如果未能解决你的问题,请参考以下文章
从 url 下载文件并将其上传到 AWS S3 而不保存 - node.js