From ba76ed3c09b31564f8c4b09457fa29783c82cb0c Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Sat, 11 Jun 2022 17:54:04 +0800 Subject: [PATCH] =?UTF-8?q?websdk=EF=BC=9A=E5=88=9B=E5=BB=BA=E5=8E=8B?= =?UTF-8?q?=E7=BC=A9=E6=96=87=E4=BB=B6=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?base64=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/webservice/新版websdk接口说明.doc | Bin 263337 -> 264901 bytes sdk/webservice/ManagerV2.cpp | 359 +++++++++++++++++++------- sdk/webservice/ManagerV2.h | 17 +- sdk/webservice/WSUser.cpp | 69 ++++- 4 files changed, 340 insertions(+), 105 deletions(-) diff --git a/doc/webservice/新版websdk接口说明.doc b/doc/webservice/新版websdk接口说明.doc index a97cbd3a3d3687e311814900db8e6261992b3ef9..dda942792a262360bf5f4d97402b751777b3c823 100644 GIT binary patch delta 25718 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 ZifZ+3H~0VT8Njv8pV_f&#r+lS{|A6odF22A delta 24974 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 C{}>+t diff --git a/sdk/webservice/ManagerV2.cpp b/sdk/webservice/ManagerV2.cpp index bac81f87..b1a7087b 100644 --- a/sdk/webservice/ManagerV2.cpp +++ b/sdk/webservice/ManagerV2.cpp @@ -726,13 +726,25 @@ namespace ver_2 return ret; } - int ManagerV2::LocalMakeZipFile(const std::vector& filePathList, std::string& outZipPath, std::string& errInfo) + int ManagerV2::LocalMakeZipFile(const std::vector& filePathList, const std::vector& nameList, + std::string& outZipPath, std::string& errInfo) { outZipPath.clear(); errInfo = "错误"; if (filePathList.empty()) return -1; + if (!nameList.empty()) + { + if (nameList.size() != filePathList.size()) + return - 1; + + for (int i = 0; i < (int)nameList.size(); ++i) + { + if (nameList[i].empty()) + return -1; + } + } std::string outZipPath2 = GetFilePath("zip"); @@ -749,9 +761,19 @@ namespace ver_2 zip_source_t* s = zip_source_file(z, StdStringToUtf8(filePathList[i]).c_str(), 0, 0); if (NULL != s) { - HGChar name[256]; - HGBase_GetFileName(filePathList[i].c_str(), name, 256); - if (zip_file_add(z, StdStringToUtf8(name).c_str(), s, ZIP_FL_OVERWRITE) >= 0) + std::string zipName; + if (!nameList.empty()) + { + zipName = nameList[i]; + } + else + { + HGChar name[256]; + HGBase_GetFileName(filePathList[i].c_str(), name, 256); + zipName = name; + } + + if (zip_file_add(z, StdStringToUtf8(zipName).c_str(), s, ZIP_FL_OVERWRITE) >= 0) { errInfo.clear(); ret = 0; @@ -1109,6 +1131,7 @@ namespace ver_2 m_currBatchId = batchId; if (!m_bindFolder.empty()) { + ClearBindFolderImageList(); UpdateBindFolder(); } } @@ -1167,6 +1190,7 @@ namespace ver_2 m_currBatchId = batchId; if (!m_bindFolder.empty()) { + ClearBindFolderImageList(); UpdateBindFolder(); } @@ -1232,6 +1256,7 @@ namespace ver_2 m_bindFolder = stdBindFolder; m_bindNameMode = nameMode; + ClearBindFolderImageList(); UpdateBindFolder(); errInfo.clear(); @@ -1523,7 +1548,7 @@ namespace ver_2 if (!m_bindFolder.empty()) { - UpdateBindFolder(); + InsertBindFolderImage(tables, insertPos, imgFormat, imgData, imgSize); } delete[] thumbData; @@ -1608,7 +1633,7 @@ namespace ver_2 if (!m_bindFolder.empty()) { - UpdateBindFolder(); + InsertBindFolderImage(tables, insertPos, imgFormat, imgData, imgSize); } delete[] thumbData; @@ -1740,7 +1765,7 @@ namespace ver_2 if (!m_bindFolder.empty()) { - UpdateBindFolder(); + DeleteBindFolderImage(tables, imageIndexList); } errInfo.clear(); @@ -1827,7 +1852,7 @@ namespace ver_2 if (!m_bindFolder.empty()) { - UpdateBindFolder(); + ModifyBindFolderImage(tables, imageIndex, imgFormat, imgData, imgSize); } delete[] thumbData; @@ -1895,7 +1920,7 @@ namespace ver_2 if (!m_bindFolder.empty()) { - UpdateBindFolder(); + ModifyBindFolderImage(tables, imageIndex, imgFormat, imgData, imgSize); } delete[] thumbData; @@ -2030,6 +2055,13 @@ namespace ver_2 if (!m_bindFolder.empty()) { + for (int i = 0; i < (int)tables.size(); ++i) + { + char fileName[256]; + sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str()); + HGBase_DeleteFile(fileName); + } + UpdateBindFolder(); } @@ -2078,7 +2110,7 @@ namespace ver_2 if (!m_bindFolder.empty()) { - UpdateBindFolder(); + ExchangeBindFolderImage(tables, imageIndex1, imageIndex2); } errInfo.clear(); @@ -2125,6 +2157,13 @@ namespace ver_2 if (!m_bindFolder.empty()) { + for (int i = 0; i < (int)tables.size(); ++i) + { + char fileName[256]; + sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str()); + HGBase_DeleteFile(fileName); + } + UpdateBindFolder(); } @@ -2146,8 +2185,7 @@ namespace ver_2 bool ok = true; for (int i = 0; i < (int)imageIndexList.size(); ++i) { - HGChar imagePath[256]; - HGBase_GetTmpFileName(NULL, imagePath, 256); + std::string imagePath; if (0 != SaveImage(imageIndexList[i], imagePath)) { ok = false; @@ -2191,8 +2229,7 @@ namespace ver_2 bool ok = true; for (int i = 0; i < (int)imageIndexList.size(); ++i) { - HGChar imagePath[256]; - HGBase_GetTmpFileName(NULL, imagePath, 256); + std::string imagePath; if (0 != SaveImage(imageIndexList[i], imagePath)) { ok = false; @@ -2231,8 +2268,7 @@ namespace ver_2 if (NULL == m_sqlite) return -1; - HGChar imagePath[256]; - HGBase_GetTmpFileName(NULL, imagePath, 256); + std::string imagePath; if (0 != SaveImage(imageIndex, imagePath)) { return -1; @@ -2240,7 +2276,7 @@ namespace ver_2 int ret = SplitLocalImage(imagePath, mode, location, outImagePathList, errInfo); - HGBase_DeleteFile(imagePath); + HGBase_DeleteFile(imagePath.c_str()); return ret; } @@ -2253,12 +2289,12 @@ namespace ver_2 return -1; std::vector imagePathList; + std::vector nameList; bool ok = true; for (int i = 0; i < (int)imageIndexList.size(); ++i) { - HGChar imagePath[256]; - HGBase_GetTmpFileName(NULL, imagePath, 256); + std::string imagePath; if (0 != SaveImage(imageIndexList[i], imagePath)) { ok = false; @@ -2266,6 +2302,12 @@ namespace ver_2 } imagePathList.push_back(imagePath); + + HGChar suffix[256]; + HGBase_GetFileSuffix(imagePath.c_str(), suffix, 256); + char name[256]; + sprintf(name, "%d.%s", imageIndexList[i], suffix); + nameList.push_back(name); } if (!ok) @@ -2278,7 +2320,7 @@ namespace ver_2 return -1; } - int ret = LocalMakeZipFile(imagePathList, outZipPath, errInfo); + int ret = LocalMakeZipFile(imagePathList, nameList, outZipPath, errInfo); for (int i = 0; i < (int)imagePathList.size(); ++i) { @@ -2296,8 +2338,7 @@ namespace ver_2 if (NULL == m_sqlite) return -1; - HGChar imagePath[256]; - HGBase_GetTmpFileName(NULL, imagePath, 256); + std::string imagePath; if (0 != SaveImage(imageIndex, imagePath)) { return -1; @@ -2305,7 +2346,74 @@ namespace ver_2 int ret = LocalImageDeskew(imagePath, outImagePath, errInfo); - HGBase_DeleteFile(imagePath); + HGBase_DeleteFile(imagePath.c_str()); + return ret; + } + + int ManagerV2::LoadBase64(const std::string& fileName, std::string& base64) + { + base64.clear(); + + int ret = -1; + FILE* file = fopen(fileName.c_str(), "rb"); + if (NULL != file) + { + fseek(file, 0, SEEK_END); + long size = ftell(file); + fseek(file, 0, SEEK_SET); + + if (size > 0) + { + HGByte* data = new HGByte[size]; + long readLen = (long)fread(data, 1, size, file); + if (readLen == size) + { + HGSize base64Size = 0; + HGBase_Base64Encode(data, size, NULL, &base64Size); + uint8_t* base64Data = new uint8_t[base64Size + 1]; + HGBase_Base64Encode(data, size, base64Data, &base64Size); + base64Data[base64Size] = 0; + base64 = (const char*)base64Data; + delete[] base64Data; + ret = 0; + } + + delete[] data; + } + + fclose(file); + } + + return ret; + } + + int ManagerV2::SaveBase64(const std::string& base64, const std::string& fileName) + { + if (base64.empty()) + return -1; + + const char* base64Data = base64.c_str(); + size_t base64Size = base64.size(); + + int ret = -1; + FILE* file = fopen(fileName.c_str(), "wb"); + if (NULL != file) + { + HGSize size = 0; + HGBase_Base64Decode((const HGByte*)base64Data, (HGSize)base64Size, NULL, &size); + uint8_t* data = new HGByte[size]; + HGBase_Base64Decode((const HGByte*)base64Data, (HGSize)base64Size, data, &size); + + size_t writeLen = fwrite(data, 1, size, file); + if (writeLen == (size_t)size) + ret = 0; + + delete[] data; + fclose(file); + } + + if (0 != ret) + HGBase_DeleteFile(fileName.c_str()); return ret; } @@ -2399,73 +2507,6 @@ namespace ver_2 return (HGBASE_ERR_OK == HGBase_SetProfileInt(cfgPath, app.c_str(), key.c_str(), (HGInt)val)); } - int ManagerV2::LoadBase64(const std::string& fileName, std::string& base64) - { - base64.clear(); - - int ret = -1; - FILE* file = fopen(fileName.c_str(), "rb"); - if (NULL != file) - { - fseek(file, 0, SEEK_END); - long size = ftell(file); - fseek(file, 0, SEEK_SET); - - if (size > 0) - { - HGByte* data = new HGByte[size]; - long readLen = (long)fread(data, 1, size, file); - if (readLen == size) - { - HGSize base64Size = 0; - HGBase_Base64Encode(data, size, NULL, &base64Size); - uint8_t* base64Data = new uint8_t[base64Size + 1]; - HGBase_Base64Encode(data, size, base64Data, &base64Size); - base64Data[base64Size] = 0; - base64 = (const char*)base64Data; - delete[] base64Data; - ret = 0; - } - - delete[] data; - } - - fclose(file); - } - - return ret; - } - - int ManagerV2::SaveBase64(const std::string& base64, const std::string& fileName) - { - if (base64.empty()) - return -1; - - const char* base64Data = base64.c_str(); - size_t base64Size = base64.size(); - - int ret = -1; - FILE* file = fopen(fileName.c_str(), "wb"); - if (NULL != file) - { - HGSize size = 0; - HGBase_Base64Decode((const HGByte*)base64Data, (HGSize)base64Size, NULL, &size); - uint8_t* data = new HGByte[size]; - HGBase_Base64Decode((const HGByte*)base64Data, (HGSize)base64Size, data, &size); - - size_t writeLen = fwrite(data, 1, size, file); - if (writeLen == (size_t)size) - ret = 0; - - delete[] data; - fclose(file); - } - - if (0 != ret) - HGBase_DeleteFile(fileName.c_str()); - return ret; - } - int ManagerV2::HttpUpload(const std::string& host, int port, const std::string& path, const std::string& filePath, const std::string& remoteFilePath) { @@ -3056,8 +3097,10 @@ namespace ver_2 return 0; } - int ManagerV2::SaveImage(int imageIndex, const std::string& imagePath) + int ManagerV2::SaveImage(int imageIndex, std::string& imagePath) { + imagePath.clear(); + if (NULL == m_sqlite) return -1; @@ -3075,11 +3118,15 @@ namespace ver_2 int idx = sqlite3_column_int(stmt, 1); if (idx == imageIndex) { + std::string imgFmt = (const char*)sqlite3_column_text(stmt, 2); const void* imgData = sqlite3_column_blob(stmt, 4); int imgSize = sqlite3_column_bytes(stmt, 4); - if (SaveToFile((const HGByte*)imgData, imgSize, imagePath)) + HGChar tmpPath[256]; + HGBase_GetTmpFileName(imgFmt.c_str(), tmpPath, 256); + if (SaveToFile((const HGByte*)imgData, imgSize, tmpPath)) { + imagePath = tmpPath; rc = 0; } @@ -3381,8 +3428,6 @@ namespace ver_2 { assert(!m_bindFolder.empty()); - ClearBindFolderImageList(); - if (NULL == m_sqlite) return; @@ -3412,6 +3457,132 @@ namespace ver_2 assert(0 == ret); } + void ManagerV2::InsertBindFolderImage(const std::vector& tables, int insertPos, const std::string imgFmt, + const HGByte* imgData, HGUInt imgSize) + { + assert(!m_bindFolder.empty()); + + for (int i = (int)tables.size() - 1; i >= 0; --i) + { + if (tables[i].idx >= insertPos) + { + char fileName[256]; + sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str()); + char destName[256]; + sprintf(destName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx + 1, tables[i].format.c_str()); + MoveFileA(fileName, destName); + } + } + + char fileName[256]; + sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), insertPos, imgFmt.c_str()); + SaveToFile(imgData, imgSize, fileName); + } + + void ManagerV2::ModifyBindFolderImage(const std::vector& tables, int imageIndex, const std::string imgFmt, + const HGByte* imgData, HGUInt imgSize) + { + assert(!m_bindFolder.empty()); + + std::string oldFormat; + for (int i = 0; i < (int)tables.size(); ++i) + { + if (tables[i].idx == imageIndex) + { + oldFormat = tables[i].format; + break; + } + } + + char oldFileName[256]; + sprintf(oldFileName, "%s%d.%s", m_bindFolder.c_str(), imageIndex, oldFormat.c_str()); + HGBase_DeleteFile(oldFileName); + + char fileName[256]; + sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), imageIndex, imgFmt.c_str()); + SaveToFile(imgData, imgSize, fileName); + } + + void ManagerV2::DeleteBindFolderImage(const std::vector& tables, const std::vector& imageIndexList) + { + assert(!m_bindFolder.empty()); + + for (int i = 0; i < (int)imageIndexList.size(); ++i) + { + for (int j = 0; j < (int)tables.size(); ++j) + { + if (tables[j].idx == imageIndexList[i]) + { + char fileName[256]; + sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[j].idx, tables[j].format.c_str()); + HGBase_DeleteFile(fileName); + break; + } + } + } + + int value = 0; + for (int i = 0; i < (int)tables.size(); ++i) + { + bool find = false; + for (int j = 0; j < (int)imageIndexList.size(); ++j) + { + if (tables[i].idx == imageIndexList[j]) + { + find = true; + break; + } + } + + if (find) + { + ++value; + } + else + { + if (value > 0) + { + char fileName[256]; + sprintf(fileName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx, tables[i].format.c_str()); + char destName[256]; + sprintf(destName, "%s%d.%s", m_bindFolder.c_str(), tables[i].idx - value, tables[i].format.c_str()); + MoveFileA(fileName, destName); + } + } + } + } + + void ManagerV2::ExchangeBindFolderImage(const std::vector& tables, int imageIndex1, int imageIndex2) + { + assert(!m_bindFolder.empty()); + + std::string format1, format2; + + for (int i = 0; i < (int)tables.size(); ++i) + { + if (tables[i].idx == imageIndex1) + format1 = tables[i].format; + else if (tables[i].idx == imageIndex2) + format2 = tables[i].format; + } + + char fileName1[256]; + sprintf(fileName1, "%s%d.%s", m_bindFolder.c_str(), imageIndex1, format1.c_str()); + char TmpFileName[256]; + sprintf(TmpFileName, "%sTemp", m_bindFolder.c_str()); + MoveFileA(fileName1, TmpFileName); + + char fileName2[256]; + sprintf(fileName2, "%s%d.%s", m_bindFolder.c_str(), imageIndex2, format2.c_str()); + char fileName2Dest[256]; + sprintf(fileName2Dest, "%s%d.%s", m_bindFolder.c_str(), imageIndex1, format2.c_str()); + MoveFileA(fileName2, fileName2Dest); + + char fileName1Dest[256]; + sprintf(fileName1Dest, "%s%d.%s", m_bindFolder.c_str(), imageIndex2, format1.c_str()); + MoveFileA(TmpFileName, fileName1Dest); + } + void ManagerV2::ClearBindFolderImageList() { assert(!m_bindFolder.empty()); diff --git a/sdk/webservice/ManagerV2.h b/sdk/webservice/ManagerV2.h index f0fac001..f03cd5c3 100644 --- a/sdk/webservice/ManagerV2.h +++ b/sdk/webservice/ManagerV2.h @@ -225,7 +225,8 @@ namespace ver_2 int SplitLocalImage(const std::string& imagePath, const std::string& mode, int location, std::vector& outImagePathList, std::string& errInfo); // 本地生成压缩文件 - int LocalMakeZipFile(const std::vector& filePathList, std::string& outZipPath, std::string& errInfo); + int LocalMakeZipFile(const std::vector& filePathList, const std::vector& nameList, + std::string& outZipPath, std::string& errInfo); // 本地图像纠偏 int LocalImageDeskew(const std::string& imagePath, std::string& outImagePath, std::string& errInfo); // 上传文件 @@ -314,6 +315,10 @@ namespace ver_2 // 图像纠偏 int ImageDeskew(int imageIndex, std::string& outImagePath, std::string& errInfo); + public: + static int LoadBase64(const std::string& fileName, std::string& base64); + static int SaveBase64(const std::string& base64, const std::string& fileName); + private: static std::string GetCfgStringValue(const std::string& app, const std::string& key, const std::string& def); static int GetCfgIntValue(const std::string& app, const std::string& key, int def); @@ -324,8 +329,6 @@ namespace ver_2 static bool SetCfgDoubleValue(const std::string& app, const std::string& key, double val); static bool SetCfgBoolValue(const std::string& app, const std::string& key, bool val); - static int LoadBase64(const std::string& fileName, std::string& base64); - static int SaveBase64(const std::string& base64, const std::string& fileName); static int HttpUpload(const std::string &host, int port, const std::string &path, const std::string& filePath, const std::string& remoteFilePath); static int FtpUpload(const std::string& user, const std::string& password, const std::string& host, int port, @@ -338,7 +341,7 @@ namespace ver_2 static void RestoreDeviceParam(const std::string& devName, const DeviceParam& devParam); static int SetParamToDevice(SANE_Handle hdev, const DeviceParam& devParam, HGUInt mask); static int GetParamFromDevice(SANE_Handle hdev, DeviceParam& devParam); - int SaveImage(int imageIndex, const std::string& imagePath); + int SaveImage(int imageIndex, std::string& imagePath); static HGByte* LoadImageFromPath(const std::string& imagePath, HGUInt& size, std::string& format); static HGByte* LoadImageFromBase64(const std::string& imageBase64, HGUInt& size, std::string& format); @@ -348,6 +351,12 @@ namespace ver_2 static bool SaveToFile(const HGByte* data, HGUInt size, const std::string &filePath); void GetBatchTableInfo(std::vector& tables); void UpdateBindFolder(); + void InsertBindFolderImage(const std::vector& tables, int insertPos, const std::string imgFmt, + const HGByte *imgData, HGUInt imgSize); + void ModifyBindFolderImage(const std::vector& tables, int imageIndex, const std::string imgFmt, + const HGByte* imgData, HGUInt imgSize); + void DeleteBindFolderImage(const std::vector& tables, const std::vector& imageIndexList); + void ExchangeBindFolderImage(const std::vector& tables, int imageIndex1, int imageIndex2); void ClearBindFolderImageList(); static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param); diff --git a/sdk/webservice/WSUser.cpp b/sdk/webservice/WSUser.cpp index fbb44ba7..cd3cc1dc 100644 --- a/sdk/webservice/WSUser.cpp +++ b/sdk/webservice/WSUser.cpp @@ -1654,10 +1654,18 @@ namespace ver_2 std::vector filePathList = GetJsonStringListValue(json, "file_path_list"); for (int i = 0; i < (int)filePathList.size(); ++i) filePathList[i] = Utf8ToStdString(filePathList[i]); + std::vector nameList; std::string outZipPath; std::string errInfo; - int ret = GetManager()->LocalMakeZipFile(filePathList, outZipPath, errInfo); + int ret = GetManager()->LocalMakeZipFile(filePathList, nameList, outZipPath, errInfo); + + std::string outZipBase64; + bool getBase64 = GetJsonBoolValue(json, "get_base64"); + if (0 == ret && getBase64) + { + GetManager()->LoadBase64(outZipPath, outZipBase64); + } bool findIden = false; std::string iden = GetJsonStringValue(json, "iden", &findIden); @@ -1674,7 +1682,15 @@ namespace ver_2 else { fmt += "\"ret\":%d, "; - fmt += "\"zip_path\":\"%s\"}"; + if (getBase64) + { + fmt += "\"zip_path\":\"%s\", "; + fmt += "\"zip_base64\":\"%s\"}"; + } + else + { + fmt += "\"zip_path\":\"%s\"}"; + } } char resp[1024] = { 0 }; @@ -1688,9 +1704,21 @@ namespace ver_2 else { if (findIden) - sprintf(resp, fmt.c_str(), "local_make_zip_file", iden.c_str(), ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + { + if (getBase64) + sprintf(resp, fmt.c_str(), "local_make_zip_file", iden.c_str(), ret, StdStringToUtf8(strToJson(outZipPath)).c_str(), + outZipBase64.c_str()); + else + sprintf(resp, fmt.c_str(), "local_make_zip_file", iden.c_str(), ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + } else - sprintf(resp, fmt.c_str(), "local_make_zip_file", ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + { + if (getBase64) + sprintf(resp, fmt.c_str(), "local_make_zip_file", ret, StdStringToUtf8(strToJson(outZipPath)).c_str(), + outZipBase64.c_str()); + else + sprintf(resp, fmt.c_str(), "local_make_zip_file", ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + } } SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE); @@ -3856,6 +3884,13 @@ namespace ver_2 std::string errInfo; int ret = GetManager()->MakeZipFile(imageIndexList, outZipPath, errInfo); + std::string outZipBase64; + bool getBase64 = GetJsonBoolValue(json, "get_base64"); + if (0 == ret && getBase64) + { + GetManager()->LoadBase64(outZipPath, outZipBase64); + } + bool findIden = false; std::string iden = GetJsonStringValue(json, "iden", &findIden); @@ -3871,7 +3906,15 @@ namespace ver_2 else { fmt += "\"ret\":%d, "; - fmt += "\"zip_path\":\"%s\"}"; + if (getBase64) + { + fmt += "\"zip_path\":\"%s\", "; + fmt += "\"zip_base64\":\"%s\"}"; + } + else + { + fmt += "\"zip_path\":\"%s\"}"; + } } char resp[1024] = { 0 }; @@ -3885,9 +3928,21 @@ namespace ver_2 else { if (findIden) - sprintf(resp, fmt.c_str(), "make_zip_file", iden.c_str(), ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + { + if (getBase64) + sprintf(resp, fmt.c_str(), "make_zip_file", iden.c_str(), ret, StdStringToUtf8(strToJson(outZipPath)).c_str(), + outZipBase64.c_str()); + else + sprintf(resp, fmt.c_str(), "make_zip_file", iden.c_str(), ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + } else - sprintf(resp, fmt.c_str(), "make_zip_file", ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + { + if (getBase64) + sprintf(resp, fmt.c_str(), "make_zip_file", ret, StdStringToUtf8(strToJson(outZipPath)).c_str(), + outZipBase64.c_str()); + else + sprintf(resp, fmt.c_str(), "make_zip_file", ret, StdStringToUtf8(strToJson(outZipPath)).c_str()); + } } SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);