查看完整版本: [-- http 上传图片  急! --]

QTCN开发网 -> Qt基础编程 -> http 上传图片  急! [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

介农酥 2020-03-26 10:09

http 上传图片  急!

我这边需要通过http的方式把图片上传给服务器,但是服务器给出了报错:Required request part 'file' is not present,客户端报的错误:server replied: Internal Server Error。
在postMan中可以正确执行:
[attachment=21440]


我的代码:

        //file
        QImage map(info.filePath());
        QByteArray byteArray;
        QDataStream write(&byteArray, QIODevice::WriteOnly);
        write << map;
        QString fileBinary = QString::fromLocal8Bit(byteArray.toBase64());
        qDebug() << QString("%1大小%2").arg(name).arg(fileBinary.size());
        ui->textEdit->append(QString("%1大小%2").arg(name).arg(fileBinary.size()));
//上面的代码主要是把图片二进制数据读到字符串fileBinary


        //param
        QJsonObject object;
        QString expressNumber = name.section(QChar('_'), 0, 0);
        object.insert("expressNumber", expressNumber);
        object.insert("nameNumber", "574901"); //网点代号
        object.insert("opCode", "182"); //操作代码
        object.insert("snNumber", mac); //设备编码
        object.insert("imgSource", info.filePath()); //图片来源
        object.insert("extend", "");
        QString param = QJsonDocument(object).toJson();
        qDebug() << "param" << param;
        ui->textEdit->append("param:" + param);
        //signature
        int length = param.length();
        QString str = QString::asprintf("%08d", length);
        qDebug() << "param长度" << str;
        ui->textEdit->append("param长度" + str);
        QString str1 = str + param;
        QCryptographicHash cryptographic(QCryptographicHash::Md5);
        QString signature = cryptographic.result().toHex();
        ui->textEdit->append("signature:" + signature);
        //url
        QString url = QString("file=%1&signature=%2&param=%3")
        .arg(fileBinary).arg(signature).arg(param);
        qDebug() << url;

        //同步
        QEventLoop loop(this);
        QNetworkAccessManager manager;
        QNetworkRequest request;
        request.setUrl(QUrl(url1));
        qDebug() << request.url();
        request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("multipart/form-data"));
        QNetworkReply *reply = manager.post(request, url.toUtf8());
        connect(&manager, &QNetworkAccessManager::finished, &loop, &QEventLoop::quit);
        loop.exec();

红色部分为关键部分,因为上面说是file这个错误,大家帮忙看看,这个file为什么错误,

liulin188 2020-03-27 14:32
    

jsxyhyj 2020-04-01 11:17
QHttpPart filePart;      
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\";filename=\"文件名\""));

jsxyhyj 2020-04-01 11:19
主要 是没那个file。你网上再搜索一下。就能找到解决方法了。发送的内容类似这样的

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="isFullEnable"

true
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="11"; filename="11.jpg"
Content-Type: image/jpeg


------WebKitFormBoundary7MA4YWxkTrZu0gW--


查看完整版本: [-- http 上传图片  急! --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled