QNetworkAccessManager::put - QIODevice::read: 将文件发送到 ftp 服务器后设备未打开

Posted

技术标签:

【中文标题】QNetworkAccessManager::put - QIODevice::read: 将文件发送到 ftp 服务器后设备未打开【英文标题】:QNetworkAccessManager::put - QIODevice::read: device not open after sending file to ftp server 【发布时间】:2014-08-25 14:24:03 【问题描述】:

当我将文件发送到 ftp 服务器并收到消息 QIODevice::read: device not open (发送此文件后..)

输出如下所示:

已上传 1673 个,共 1673 个

QIODevice::read: 设备未打开

完成 0

#include "uploader.h"
 
Uploader::Uploader(QObject *parent) :
    QObject(parent)


 
void Uploader::start(const QString &fileName) 
    QUrl url("ftp://adresIP/test/tt.txt");
    url.setUserName("ftp@domena.pl");
    url.setPassword("passwd");
 
    file = new QFile(fileName);
 
    QByteArray putData;
 
    file->open(QIODevice::ReadOnly);
 
    putData.append(file->readAll());
 
    //-- other attempts
    file->flush();
    file->close();
    delete file;
    //--
 
    reply = nam.put(QNetworkRequest(url), putData);
    connect(reply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(uploadProgress(qint64, qint64)));
    connect(reply, SIGNAL(finished()), this, SLOT(uploadDone()));
 

 
 
void Uploader::uploadProgress(qint64 bytesSent, qint64 bytesTotal) 
    qDebug() << "Uploaded" << bytesSent << "of" << bytesTotal;

 
void Uploader::uploadDone() 
    qDebug() << "Finished" << reply->error();
 
    reply->deleteLater();

 
//uploader.h
   QNetworkAccessManager nam;
   QFile *file;
   QNetworkReply *reply;
 
//main.cpp
Uploader u;
u.start("F:\\song.mp3");

编辑:

我在 Qt 5.0.1 上进行了测试,在 Ubuntu 上(之前是 Windows,Qt 5.3),这里一切正常(消息 QIODevice::read: device not open 不显示..)。可能是 Qt 框架的错误?

【问题讨论】:

File Upload Error With QNetworkAccessManager的可能重复 但是我可以将数据上传到服务器..我不知道为什么我总是收到消息'QIODevice::read: device not open',虽然文件上传完成成功;屏幕:oi61.tinypic.com/x45cvo.jpg 【参考方案1】:

我认为这是一个 qt 问题。在 ftp 上传 wirh qt 5.3 win vs2010 后,我收到了同样的警告。安装 5.5 后消息消失了。

【讨论】:

以上是关于QNetworkAccessManager::put - QIODevice::read: 将文件发送到 ftp 服务器后设备未打开的主要内容,如果未能解决你的问题,请参考以下文章