* @brief 上传较大资源文件对象 * @param server * @param url * @param key * @param kbGuid * @param docGuid * @param objType * @param objId * @param data 待上传的数据 * @param isLast * @param res * @return */
| 1286 | * @return |
| 1287 | */ |
| 1288 | bool uploadObject(WizKMDatabaseServer& server, const QString& url, const QString& key, const QString& kbGuid, const QString& docGuid, const QString& objType, const QString& objId, const QByteArray& data, bool isLast, Json::Value& res) |
| 1289 | { |
| 1290 | // 将数据分割成1M的块 |
| 1291 | int partSize = 1024 * 1024; //1M |
| 1292 | int partCount = (data.length() + partSize - 1) / partSize; |
| 1293 | for (int i = 0; i < partCount; i++) |
| 1294 | { |
| 1295 | QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); |
| 1296 | // |
| 1297 | QHttpPart keyPart; |
| 1298 | keyPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"key\"")); |
| 1299 | keyPart.setBody(key.toUtf8()); |
| 1300 | |
| 1301 | QHttpPart kbGuidPart; |
| 1302 | kbGuidPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"kbGuid\"")); |
| 1303 | kbGuidPart.setBody(kbGuid.toUtf8()); |
| 1304 | |
| 1305 | QHttpPart docGuidPart; |
| 1306 | docGuidPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"docGuid\"")); |
| 1307 | docGuidPart.setBody(docGuid.toUtf8()); |
| 1308 | |
| 1309 | QHttpPart objIdPart; |
| 1310 | objIdPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"objId\"")); |
| 1311 | objIdPart.setBody(objId.toUtf8()); |
| 1312 | |
| 1313 | QHttpPart objTypePart; |
| 1314 | objTypePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"objType\"")); |
| 1315 | objTypePart.setBody(objType.toUtf8()); |
| 1316 | |
| 1317 | QHttpPart indexPart; |
| 1318 | indexPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"partIndex\"")); |
| 1319 | indexPart.setBody(WizIntToStr(i).toUtf8()); |
| 1320 | |
| 1321 | QHttpPart countPart; |
| 1322 | countPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"partCount\"")); |
| 1323 | countPart.setBody(WizIntToStr(partCount).toUtf8()); |
| 1324 | |
| 1325 | QHttpPart isLastPart; |
| 1326 | isLastPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"isLast\"")); |
| 1327 | isLastPart.setBody(isLast ? "1" : "0"); |
| 1328 | |
| 1329 | QHttpPart filePart; |
| 1330 | QString filePartHeader = QString("form-data; name=\"data\"; filename=\"%1\"").arg(objId); |
| 1331 | filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant(filePartHeader)); |
| 1332 | // |
| 1333 | int extra = 0; |
| 1334 | int partEnd = i * partSize + partSize; |
| 1335 | if (partEnd > data.length()) { |
| 1336 | extra = partEnd - data.length(); |
| 1337 | } |
| 1338 | QByteArray partData = data.mid(i * partSize, partSize - extra); |
| 1339 | filePart.setBody(partData); |
| 1340 | // 组装HTTP请求 |
| 1341 | multiPart->append(keyPart); |
| 1342 | multiPart->append(kbGuidPart); |
| 1343 | multiPart->append(docGuidPart); |
| 1344 | multiPart->append(objIdPart); |
| 1345 | multiPart->append(objTypePart); |
no test coverage detected