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 写入它。 QBufferQByteArray 提供了一个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

sharepoint 2007 “文件为网络下载文件,请存储到硬盘之后再修改文件。”

能把网页中打开的pdf文件直接保存下来而不使用下载吗?

下载 PhpSpreadsheet 文件而不保存之前

使用 PHP 创建文件以供下载而不保存在服务器上

java怎么实现导出数据后放到word文档中,并且可以保存到本硬盘上(类似于百度文库里面的下载功能)