2 bishi6003 bishi6003 于 2017.09.11 15:03 提问

关于QT通过HTTP协议上传文件的问题

请问各位大神,我现在有一个程序可以实现将单个的文件通过HTTP协议上传到web服务器,但是现在我有一个文件夹,里面有很多文件,而且是随着时间不断增加的,我应该怎么把这些文件都上传至服务器

3个回答

oyljerry
oyljerry   Ds   Rxr 2017.09.11 16:26

遍历文件夹,然后读取每一个文件,然后再调用你的上传接口一个个文件上传

bishi6003
bishi6003 我是遍历文件夹,把文件的路径存到一个list里,然后用list里的文件路径上传文件,但是运行的时候就会崩溃,程序异常退出,是我上传的时候有问题吗 不太懂这一块,我的代码是下面这一段
2 个月之前 回复
bishi6003
bishi6003   2017.09.11 16:52

QStringList file_path;
QDir dir("C:/2017-09-08");
QFileInfoList info_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::AllDirs);
foreach(QFileInfo file_info, info_list)
{

 if (file_info.isFile())
  {

    qDebug() << "remove file  : " << file_info.absoluteFilePath();
    file_path.append(file_info.absoluteFilePath());
    QString file_name = file_info.fileName();
    qDebug() <<file_name<<endl;
    n++;
  }
}
qDebug() <<n<<endl;
for(int i=0;i<n;i++)
{
    QString filepath = file_path.at(i);
file = new QFile(filepath);
file->open(QIODevice::ReadOnly);
QNetworkAccessManager *accessManager1 = new QNetworkAccessManager(this);  //在服务器上创建目录
accessManager1->setNetworkAccessible(QNetworkAccessManager::Accessible);
QByteArray data;
QUrl url1("http://localhost/createFolder.php?foldername=upload");
QNetworkRequest request1(url1);
request1.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("application/octet-stream"));
accessManager1->post(request1, data);

QNetworkAccessManager *accessManager2 = new QNetworkAccessManager(this);    //往该目录中上传文件
accessManager2->setNetworkAccessible(QNetworkAccessManager::Accessible);
QByteArray byte_file = file->readAll();
QUrl url2("http://localhost/upload.php?foldername=upload&filename=99.txt");    //如这里指定的上传文件至HTTP服务器目录中的upload目录中
QNetworkRequest request2(url2);
request2.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");
reply = accessManager2->post(request2, byte_file);

progressBar = new QProgressBar();
progressBar->setValue(0);
progressBar->show();

connect(accessManager2,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(loadError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(uploadProgress(qint64 ,qint64)), this, SLOT(loadProgress(qint64 ,qint64)));

}

bishi6003
bishi6003   2017.09.11 17:12

程序倒是能传上去文件,但是一旦文件传完就会出现程序异常退出的情况,而且传输的文件不完整呢

Csdn user default icon
上传中...
上传图片
插入图片