数据库增加上传和下载文件接口

This commit is contained in:
luoliangyi 2022-12-14 17:32:48 +08:00
parent 4fa2231a8b
commit 23544fbc06
6 changed files with 213 additions and 9 deletions

View File

@ -122,6 +122,28 @@ HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGCh
return userMgrImpl->ModifyPassword(oldPwd, newPwd); return userMgrImpl->ModifyPassword(oldPwd, newPwd);
} }
HGResult HGAPI HGPdtToolDb_UploadFile(HGPdtToolDbUserMgr userMgr, const HGChar* tag, const HGChar* fileName)
{
if (NULL == userMgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGPdtToolDbUserMgrImpl* userMgrImpl = (HGPdtToolDbUserMgrImpl*)userMgr;
return userMgrImpl->UploadFile(tag, fileName);
}
HGResult HGAPI HGPdtToolDb_DownloadFile(HGPdtToolDbUserMgr userMgr, const HGChar* tag, const HGChar* fileName)
{
if (NULL == userMgr)
{
return HGBASE_ERR_INVALIDARG;
}
HGPdtToolDbUserMgrImpl* userMgrImpl = (HGPdtToolDbUserMgrImpl*)userMgr;
return userMgrImpl->DownloadFile(tag, fileName);
}
HGResult HGAPI HGPdtToolDb_Export(HGPdtToolDbUserMgr userMgr, const HGChar* xlsPath) HGResult HGAPI HGPdtToolDb_Export(HGPdtToolDbUserMgr userMgr, const HGChar* xlsPath)
{ {
if (NULL == userMgr) if (NULL == userMgr)

View File

@ -12,6 +12,8 @@ HGPdtToolDb_CreateUser
HGPdtToolDb_DestroyUser HGPdtToolDb_DestroyUser
HGPdtToolDb_SetPassword HGPdtToolDb_SetPassword
HGPdtToolDb_ModifyPassword HGPdtToolDb_ModifyPassword
HGPdtToolDb_UploadFile
HGPdtToolDb_DownloadFile
HGPdtToolDb_Export HGPdtToolDb_Export
HGPdtToolDb_GetUserConfig HGPdtToolDb_GetUserConfig
HGPdtToolDb_SetUserConfig HGPdtToolDb_SetUserConfig

View File

@ -126,6 +126,12 @@ HGEXPORT HGResult HGAPI HGPdtToolDb_SetPassword(HGPdtToolDbUserMgr userMgr, cons
/* 修改本账户的密码 */ /* 修改本账户的密码 */
HGEXPORT HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGChar* oldPwd, const HGChar* newPwd); HGEXPORT HGResult HGAPI HGPdtToolDb_ModifyPassword(HGPdtToolDbUserMgr userMgr, const HGChar* oldPwd, const HGChar* newPwd);
/* 上传/更新文件,需要管理员账户才能调用 */
HGEXPORT HGResult HGAPI HGPdtToolDb_UploadFile(HGPdtToolDbUserMgr userMgr, const HGChar *tag, const HGChar *fileName);
/* 下载文件 */
HGEXPORT HGResult HGAPI HGPdtToolDb_DownloadFile(HGPdtToolDbUserMgr userMgr, const HGChar* tag, const HGChar* fileName);
/* 导出所有设备测试信息到XLS文件 */ /* 导出所有设备测试信息到XLS文件 */
HGEXPORT HGResult HGAPI HGPdtToolDb_Export(HGPdtToolDbUserMgr userMgr, const HGChar *xlsPath); HGEXPORT HGResult HGAPI HGPdtToolDb_Export(HGPdtToolDbUserMgr userMgr, const HGChar *xlsPath);

View File

@ -151,7 +151,8 @@ HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const
return HGPDTTOOLDB_ERR_WRONG_PASSWORD; return HGPDTTOOLDB_ERR_WRONG_PASSWORD;
} }
if (0 != CreateMainTestTable(sql) || 0 != CreateInitInspTestTable(sql) || 0 != CreateInitInspDescTable(sql) if (0 != CreateFileTable(sql) || 0 != CreateMainTestTable(sql)
|| 0 != CreateInitInspTestTable(sql) || 0 != CreateInitInspDescTable(sql)
|| 0 != CreateImgInspTestTable(sql) || 0 != CreateImgInspDescTable(sql) || 0 != CreateImgInspTestTable(sql) || 0 != CreateImgInspDescTable(sql)
|| 0 != CreatePreInspTestTable(sql) || 0 != CreatePreInspDescTable(sql)) || 0 != CreatePreInspTestTable(sql) || 0 != CreatePreInspDescTable(sql))
{ {
@ -445,6 +446,172 @@ HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGCh
return (0 == ret) ? HGBASE_ERR_OK : HGBASE_ERR_FAIL; return (0 == ret) ? HGBASE_ERR_OK : HGBASE_ERR_FAIL;
} }
HGResult HGPdtToolDbUserMgrImpl::UploadFile(const HGChar* tag, const HGChar* fileName)
{
if (NULL == m_sql)
{
return HGBASE_ERR_FAIL;
}
if (NULL == tag || 0 == *tag || NULL == fileName || 0 == *fileName)
{
return HGBASE_ERR_INVALIDARG;
}
HGUInt userType = 0;
GetUserType(&userType);
if (HGPDTTOOLDB_USERTYPE_ROOT != userType)
{
return HGBASE_ERR_ACCESSDENIED;
}
FILE* file = fopen(fileName, "rb");
if (NULL == file)
{
return HGBASE_ERR_FILENOTEXIST;
}
fseek(file, 0, SEEK_END);
unsigned long fileSize = ftell(file);
fseek(file, 0, SEEK_SET);
if (fileSize <= 0)
{
fclose(file);
return HGBASE_ERR_FILEERROR;
}
void* fileData = malloc(fileSize);
if (NULL == fileData)
{
fclose(file);
return HGBASE_ERR_OUTOFMEMORY;
}
if (fileSize != fread(fileData, 1, fileSize, file))
{
free(fileData);
fclose(file);
return HGBASE_ERR_FAIL;
}
HGResult res = HGBASE_ERR_FAIL;
MYSQL_STMT *stmt = mysql_stmt_init(m_sql);
assert(NULL != stmt);
char sqlCmd[1024] = {0};
sprintf(sqlCmd, "insert into file_list (tag, file_data) values ('%s', ?);", tag);
int ret = mysql_stmt_prepare(stmt, sqlCmd, strlen(sqlCmd));
assert(0 == ret);
MYSQL_BIND bnd = {0};
bnd.buffer_type = MYSQL_TYPE_BLOB;
bnd.buffer = fileData;
bnd.buffer_length = fileSize;
ret = mysql_stmt_bind_param(stmt, &bnd);
assert(0 == ret);
ret = mysql_stmt_execute(stmt);
if (0 == ret)
{
res = HGBASE_ERR_OK;
}
else
{
if (1062 == mysql_stmt_errno(stmt))
{
sprintf(sqlCmd, "update file_list set file_data = ? where tag = '%s';", tag);
ret = mysql_stmt_prepare(stmt, sqlCmd, strlen(sqlCmd));
assert(0 == ret);
MYSQL_BIND bnd = {0};
bnd.buffer_type = MYSQL_TYPE_BLOB;
bnd.buffer = fileData;
bnd.buffer_length = fileSize;
ret = mysql_stmt_bind_param(stmt, &bnd);
assert(0 == ret);
ret = mysql_stmt_execute(stmt);
if (0 == ret)
{
res = HGBASE_ERR_OK;
}
}
}
mysql_stmt_close(stmt);
free(fileData);
fclose(file);
return res;
}
HGResult HGPdtToolDbUserMgrImpl::DownloadFile(const HGChar* tag, const HGChar* fileName)
{
if (NULL == m_sql)
{
return HGBASE_ERR_FAIL;
}
if (NULL == tag || 0 == *tag || NULL == fileName || 0 == *fileName)
{
return HGBASE_ERR_INVALIDARG;
}
HGResult res = HGBASE_ERR_FAIL;
MYSQL_STMT* stmt = mysql_stmt_init(m_sql);
assert(NULL != stmt);
char sqlCmd[1024] = {0};
sprintf(sqlCmd, "select file_data from file_list where tag = '%s';", tag);
int ret = mysql_stmt_prepare(stmt, sqlCmd, strlen(sqlCmd));
assert(0 == ret);
unsigned long readLength = 0;
MYSQL_BIND bnd = {0};
bnd.buffer_type = MYSQL_TYPE_BLOB;
bnd.length = &readLength;
ret = mysql_stmt_bind_result(stmt, &bnd);
assert(0 == ret);
ret = mysql_stmt_execute(stmt);
assert(0 == ret);
mysql_stmt_fetch(stmt);
if (readLength > 0)
{
bnd.buffer = malloc(readLength);
if (NULL != bnd.buffer)
{
bnd.buffer_length = readLength;
ret = mysql_stmt_fetch_column(stmt, &bnd, 0, 0);
assert(0 == ret);
FILE* file = fopen(fileName, "wb");
if (NULL != file)
{
if (readLength == fwrite(bnd.buffer, 1, bnd.buffer_length, file))
{
ret = HGBASE_ERR_OK;
}
fclose(file);
}
else
{
res = HGBASE_ERR_ACCESSDENIED;
}
free(bnd.buffer);
}
else
{
res = HGBASE_ERR_OUTOFMEMORY;
}
}
mysql_stmt_close(stmt);
return res;
}
HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath) HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath)
{ {
if (NULL == m_sql) if (NULL == m_sql)
@ -786,6 +953,16 @@ std::string HGPdtToolDbUserMgrImpl::GetAuthString(MYSQL* sql, const HGChar* pwd)
return authString; return authString;
} }
int HGPdtToolDbUserMgrImpl::CreateFileTable(MYSQL* sql)
{
assert(NULL != sql);
std::string cmd = "create table if not exists file_list (tag varchar(20) not null primary key";
cmd += ", file_data blob";
cmd += ");";
return mysql_query(sql, cmd.c_str());
}
int HGPdtToolDbUserMgrImpl::CreateMainTestTable(MYSQL* sql) int HGPdtToolDbUserMgrImpl::CreateMainTestTable(MYSQL* sql)
{ {
assert(NULL != sql); assert(NULL != sql);

View File

@ -24,6 +24,8 @@ public:
HGResult DestroyUser(const HGChar* userName); HGResult DestroyUser(const HGChar* userName);
HGResult SetPassword(const HGChar* userName, const HGChar* pwd); HGResult SetPassword(const HGChar* userName, const HGChar* pwd);
HGResult ModifyPassword(const HGChar* oldPwd, const HGChar* newPwd); HGResult ModifyPassword(const HGChar* oldPwd, const HGChar* newPwd);
HGResult UploadFile(const HGChar* tag, const HGChar* fileName);
HGResult DownloadFile(const HGChar* tag, const HGChar* fileName);
HGResult Export(const HGChar* xlsPath); HGResult Export(const HGChar* xlsPath);
HGResult GetConfig(const HGChar *key, HGChar *value, HGUInt maxLen); HGResult GetConfig(const HGChar *key, HGChar *value, HGUInt maxLen);
HGResult SetConfig(const HGChar* key, const HGChar *value); HGResult SetConfig(const HGChar* key, const HGChar *value);
@ -36,6 +38,7 @@ private:
static std::string GetPassword(MYSQL* sql, const HGChar* userName); static std::string GetPassword(MYSQL* sql, const HGChar* userName);
static std::string GetAuthString(MYSQL* sql, const HGChar* pwd); static std::string GetAuthString(MYSQL* sql, const HGChar* pwd);
int CreateFileTable(MYSQL* sql);
int CreateMainTestTable(MYSQL *sql); int CreateMainTestTable(MYSQL *sql);
int CreateInitInspTestTable(MYSQL* sql); int CreateInitInspTestTable(MYSQL* sql);
int CreateInitInspDescTable(MYSQL* sql); int CreateInitInspDescTable(MYSQL* sql);

View File

@ -8,15 +8,9 @@ int main()
HGPdtToolDb_CreateUserMgr("127.0.0.1", 3306, "root", "123456", &userMgr); HGPdtToolDb_CreateUserMgr("127.0.0.1", 3306, "root", "123456", &userMgr);
if (NULL != userMgr) if (NULL != userMgr)
{ {
HGChar* name[256]; HGPdtToolDb_UploadFile(userMgr, "G100", "D:\\config.json");
HGUInt count;
HGPdtToolDb_GetUserList(userMgr, name, 256, &count);
HGPdtToolDb_DestroyUser(userMgr, "kkk"); HGPdtToolDb_DownloadFile(userMgr, "G100", "D:\\123.txt");
//HGPdtToolDb_CreateUser(userMgr, "huago", "123456");
//HGPdtToolDb_ModifyPassword(userMgr, "1234", "123456");
//HGPdtToolDb_SetPassword(userMgr, "huago", "654321");
HGPdtToolDbDevice device = NULL; HGPdtToolDbDevice device = NULL;
HGPdtToolDb_OpenDevice(userMgr, "G123456", &device); HGPdtToolDb_OpenDevice(userMgr, "G123456", &device);