@@ -263,7 +263,32 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
263263 _tcsxcpy (tszFileName, pSt_HTTPParam->tszHttpUri + 1 );
264264 BaseLib_String_Replace (tszFileName, &nFLen, st_StorageBucket.tszBuckKey , st_StorageBucket.tszFilePath );
265265
266- _xtremove (tszFileName);
266+ SYSTEMAPI_FILE_ATTR st_FileAttr = {};
267+ if (SystemApi_File_GetFileAttr (tszFileName, &st_FileAttr))
268+ {
269+ if (st_FileAttr.bFile )
270+ {
271+ _xtremove (tszFileName);
272+ }
273+ else
274+ {
275+ // 如果是文件夹
276+ int nFileCount = 0 ;
277+ XCHAR** pptszListFile;
278+ SystemApi_File_EnumFile (tszFileName, &pptszListFile, &nFileCount);
279+ BaseLib_Memory_Free ((XPPPMEM)&pptszListFile, nFileCount);
280+ if (nFileCount > 0 )
281+ {
282+ st_HDRParam.bIsClose = true ;
283+ st_HDRParam.nHttpCode = 400 ;
284+ HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
285+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
286+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" WEBDAV客户端:%s,处理WEBDAV协议DELETE方法失败,删除的文件夹不为空,URL:%s" ), lpszClientAddr, tszFileName);
287+ return false ;
288+ }
289+ SystemApi_File_DeleteMutilFolder (tszFileName, true );
290+ }
291+ }
267292 HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
268293 XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
269294 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBDAV客户端:%s,处理WEBDAV协议DELETE方法成功,删除的文件:%s" ), lpszClientAddr, tszFileName);
0 commit comments