ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

QT 5.8 用QNetwork 上传图片到php服务器,并通过url下载图片

2021-04-02 14:01:52  阅读:150  来源: 互联网

标签:QT 5.8 void QString reply include QDownUpLoadImage dir 图片


.h

#ifndef REMOVEBGCONN_H
#define REMOVEBGCONN_H

#include <QObject>
#include <QFile>
#include <QThread>
#include <QTimer>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QHttpMultiPart>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>

class QDownUpLoadImage : public QObject
{
    Q_OBJECT
public:
    QDownUpLoadImage();
	void solveReplyGet(QByteArray picRaw, QString filePath);
signals:
    void receivedData(QByteArray d, QString filePath);
    void connectError(QString e);
    void connectInfo(QString info);

public slots:
    void postData(QString filepath, QString token, bool start);
    bool postDataReal();
    void solveReply();
	void solveRecveImage();
    void clearData();
	void postImageData(QString filepath);
	void downImageUrl(QString url);
	void solveRecveDownImage(QNetworkReply* reply);
private:
	QNetworkAccessManager *accessManager;
    QNetworkReply* reply;
	
    QFile *file;
    std::vector<QString> filepath;
    std::vector<QString> token;
    int i = 0;
};

#endif // REMOVEBGCONN_H



.cpp

#include "Stdafx.h"
#include "QDownUpLoadImage.h"
#include<iostream>
#include <iphlpapi.h>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QSslConfiguration>
#include <QtNetwork/QSslSocket>
#include "json\json.h"


QDownUpLoadImage::QDownUpLoadImage()
{ 
	//SSL_library_init();
	//SSL_load_error_strings();
	
	 accessManager = new QNetworkAccessManager();

	 qDebug() << accessManager->supportedSchemes();
	// qDebug() << QSslSocket::sslLibraryBuildVersionString();
   // qDebug() << QSslSocket::supportsSsl() << QSslSocket::sslLibraryBuildVersionString() << QSslSocket::sslLibraryVersionString();
}


void QDownUpLoadImage::downImageUrl(QString url)
{
	disconnect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(solveRecveDownImage(QNetworkReply*)));
	connect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(solveRecveDownImage(QNetworkReply*)));
	accessManager->get(QNetworkRequest(QUrl(url)));

}



void QDownUpLoadImage::solveRecveDownImage(QNetworkReply* reply)
{
	QByteArray ba = reply->readAll();
	if (ba.size() > 100)
	{
		std::cout << "st";
		QImage* img2 = new QImage();
		img2->loadFromData(ba);

		if (img2->isNull())
			std::cout << "oops";

		if (img2->save("omg2.jpg", "JPG"))
		{
			std::cout << "saved";

			QFile File("omg2.png");
			File.open(QIODevice::WriteOnly);
			File.write(ba);
			File.close();
		}	
		else
			std::cout << "dont...";


	}
	
}


void  QDownUpLoadImage::postImageData(QString filepath)
{
	QFile file(filepath);
	if (!file.open(QIODevice::ReadOnly)) {
		qDebug() << "file open failed.";
		return;
	}
	QByteArray data = file.readAll();
	file.close();


	QString strRemoteUrl = "http://127.0.0.1/design/image.php";
	QNetworkRequest request;
	//? request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, QVariant("application/x-www-form-urlencoded"));
	request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
	//QSslConfiguration config;
	// 发送https请求前准备工作;
	request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
	
	request.setUrl(QUrl(strRemoteUrl));
	reply = accessManager->post(request, "fileData=" + data.toBase64() + "&oldimagepath="+ filepath.toUtf8().toBase64());
	emit connectInfo("正在发送...");

	QObject::connect(reply, &QNetworkReply::finished, this, &QDownUpLoadImage::solveRecveImage);
	return ;

}

void QDownUpLoadImage::postData(QString filepath, QString token, bool start)
{
    this->filepath.push_back(filepath);
    this->token.push_back(token);
    if(start)
    {
        i = 0;
        postDataReal();
    }
}




void QDownUpLoadImage::solveReplyGet(QByteArray picRaw, QString filePath)
{
	bool isFileNotDir = false;
	QString outputPath = "GenRemoveBack";
	if (isFileNotDir)
	{
		QFileInfo fileinfo(outputPath);
		if (!fileinfo.dir().exists())
			if (!fileinfo.dir().mkdir(fileinfo.dir().absolutePath()))
			{
				//ui->plainTextEdit->appendPlainText(QString("创建路径失败:%1").arg(fileinfo.dir().absolutePath()));
				return;
			}
	}
	else
	{
		QDir dir(outputPath);
		if (!dir.exists())
			if (!dir.mkdir(dir.absolutePath()))
			{
				//ui->plainTextEdit->appendPlainText(QString("创建路径失败:%1").arg(dir.absolutePath()));
				return;
			}
		QFileInfo fileinfo(filePath);
		outputPath = QString("%1/%2-no-bg.png").arg(outputPath).arg(fileinfo.fileName());
	}
	QFile file(outputPath);
	if (!file.open(QIODevice::WriteOnly))
	{
		//ui->plainTextEdit->appendPlainText(QString("创建文件失败:%1").arg(filePath));
		return;
	}
	file.write(picRaw);
	file.close();
	//emit smallToBig(filePath, outputPath);

}

void QDownUpLoadImage::solveRecveImage()
{
	if (reply->error() == QNetworkReply::NoError)
	{
		QString itemGetStr = reply->readAll();

		Json::Reader reader;
		Json::Value root;
		if (reader.parse(itemGetStr.toStdString(), root))
		{
			int code = root["code"].asInt();
			if (code == 0)
			{
				std::string imagepath = root["imagepath"].asString();
				std::string oldimagepath = root["oldimagepath"].asString();
				QByteArray ba;
				ba = QByteArray(oldimagepath.c_str());
				ba = ba.fromBase64(ba);
				QString getoldimagepath = QString::fromUtf8(ba);

				int j = 0;
				j++;
				//g_utilTool->CompleteLoadImage(getoldimagepath,imagepath.c_str());
			}
			
		}

		int j = 0;
		j++;
	}
	else
	{
		QString strReplay = reply->errorString();
		int j = 0;
		j++;
		//?emit connectError(reply->errorString());
	}

}



void QDownUpLoadImage::clearData()
{
    filepath.clear();
    token.clear();
    i = 0;
}



.php
<?php

 $currentDateTime  =  date('YmdHis',time());
 $currentDate =  date('Ymd',time());


$imageName = rand(1111,9999)."_".date("His",time())."_".rand(1111,9999).'.png';


if (!is_dir($currentDate)){ //判断目录是否存在 不存在就创建
 mkdir($currentDate,0777,true);
}
$imageSrc= $currentDate."/". $imageName;

$oldimagepath=$_POST['oldimagepath'];
$recContent=$_POST['fileData'];
$data=base64_decode(str_replace(" ","+",($recContent)));
$r = file_put_contents($imageSrc, $data);

if (!$r) {
 $tmparr1=array('data'=>null,"code"=>1,"msg"=>"图片生成失败" );
 echo json_encode($tmparr1);
}else{
 $tmparr2=array('data'=>1,"code"=>0,"msg"=>"图片生成成功","imagepath"=>$imageSrc,"oldimagepath"=>$oldimagepath);
 echo json_encode($tmparr2);
}



?>



使用例子
QDownUpLoadImage m_RemoveBGConn;

m_RemoveBGConn.downImageUrl("http://127.0.0.1/design/1.jpg"); 下载

m_RemoveBGConn.postImageData("C:\\500.png"); 上传

 

标签:QT,5.8,void,QString,reply,include,QDownUpLoadImage,dir,图片
来源: https://blog.csdn.net/qq_30377315/article/details/115396864

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有