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里的文件路径上传文件,但是运行的时候就会崩溃,程序异常退出,是我上传的时候有问题吗 不太懂这一块,我的代码是下面这一段
10 个月之前 回复
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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
qt http 上传文件
看服务器支持,如果是http服务器,可用 http post方式上传数据或文件。
使用http协议实现文件的上传(http协议上传文件一般最大是2M,比较适合上传小于两M的文件)
import java.io.File;  import java.io.FileInputStream;  import java.io.FileNotFoundException;  import java.io.InputStream;    /** * 上传的文件 */  public clas
通过http协议向web上传文件
一、通过edtitext获得要添加的文件名字,在FormFile构造方法中获得该文件输入流, public class MainActivity extends Activity { private EditText titleText; private EditText lengthText; private EditText nameText;
qt 发送数据到http
用到的头文件 Def.h #ifndef DEF_H #define DEF_H #define SERVER_PORT "10099" #define SERVER_IP "192.168.169.1" #endif // DEF_H Registre.h #include #include #include #include "def.h" #include #include
java的http协议文件上传 (一)
-
Http协议格式——socket实现http文件上传
RT,做项目中有时候
采用HTTP协议上传文件实现(java)
j2ee开发也好几年,文件上传功能基本都是用的第三方的组件,虽然知道其原理,但一直不知道具体是如何实现的,最近有时间,正好同事开发遇到这方面的问题,查了点资料,基本明白了具体实现,为了备忘,就写下这篇随笔。     首先说说同事遇到的问题,最近的项目是使用webwork开发的,同事需要实现多文件上传的功能,但是 webwork原则上支持三种上传解析 pell,cos,jakarta,三种都
文件上传 方法之一------通过 http 协议上传文件
1、概述在最初的 http 协议中,没有上传文件方面的功能。 rfc1867 (http://www.ietf.org/rfc/rfc1867.txt) 为 http 协议添加了这个功能。客户端的浏览器,如 Microsoft IE, Mozila, Opera 等,按照此规范将用户指定的文件发送到服务器。服务器端的网页程序,如 php, asp, jsp 等,可以按照此规范,解析出用户发送来
HTTP文件上传协议的具体格式示例
POST /myweb/upload HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9
2.使用Http协议Post上传文件
2.1 背景公司产品需要做一个关于收集程序崩溃信息的模块,需要客户端程序在崩溃发生后将崩溃日志以及转储文件发送到后台。后台是HttpServer 理所当然的便想到了使用Http的Post来上传文件。2.2 协议格式http协议网上说的有很多,http协议大致有三个部分:Request-Line/Respone-Line,Header,Body三个部分。虽然网上说使用Http协议的Post上传文件的...