@@ -50,8 +50,10 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
5050
5151 LPCXSTR lpszMethodOption = _X (" OPTIONS" );
5252 LPCXSTR lpszMethodPropfind = _X (" PROPFIND" );
53+ LPCXSTR lpszMethodPropPatch = _X (" PROPPATCH" );
5354 LPCXSTR lpszMethodGet = _X (" GET" );
5455 LPCXSTR lpszMethodPut = _X (" PUT" );
56+ LPCXSTR lpszMethodDel = _X (" DELETE" );
5557 LPCXSTR lpszMethodLock = _X (" LOCK" );
5658
5759 st_HDRParam.bIsClose = false ;
@@ -62,7 +64,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
6264 // 用于心跳
6365 st_HDRParam.bIsClose = true ;
6466 st_HDRParam.nHttpCode = 200 ;
65- LPCXSTR lpszHdrBuffer = _X (" Allow: OPTIONS POST GET PUT PROPFIND DELETE LOCK\r\n " );
67+ LPCXSTR lpszHdrBuffer = _X (" Allow: OPTIONS POST GET PUT PROPFIND PROPPATCH DELETE LOCK\r\n " );
6668 HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , lpszHdrBuffer);
6769 XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
6870 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBDAV客户端:%s,请求OPTIONS心跳方法成功" ), lpszClientAddr);
@@ -79,7 +81,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
7981 return false ;
8082 }
8183 XENGINE_STORAGEBUCKET st_StorageBucket = {};
82- if (!APIHelp_Distributed_CTStorage (pSt_HTTPParam->tszHttpUri + 1 , st_LoadbalanceCfg.st_LoadBalance .pStl_ListBucket , &st_StorageBucket))
84+ if (!APIHelp_Distributed_DLStorage (pSt_HTTPParam->tszHttpUri , st_LoadbalanceCfg.st_LoadBalance .pStl_ListBucket , &st_StorageBucket))
8385 {
8486 st_HDRParam.bIsClose = true ;
8587 st_HDRParam.nHttpCode = 400 ;
@@ -215,6 +217,33 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
215217 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBDAV客户端:%s,处理WEBDAV协议LOCK方法成功,锁用户:%s" ), lpszClientAddr, st_WDLock.tszOwner );
216218 return true ;
217219 }
220+ else if (0 == _tcsxnicmp (lpszMethodDel, pSt_HTTPParam->tszHttpMethod , _tcsxlen (lpszMethodDel)))
221+ {
222+ // 使用重定向实现上传
223+ st_HDRParam.bIsClose = false ;
224+ st_HDRParam.nHttpCode = 204 ;
225+
226+ XENGINE_STORAGEBUCKET st_StorageBucket = {};
227+ if (!APIHelp_Distributed_DLStorage (pSt_HTTPParam->tszHttpUri , st_LoadbalanceCfg.st_LoadBalance .pStl_ListBucket , &st_StorageBucket))
228+ {
229+ st_HDRParam.bIsClose = true ;
230+ st_HDRParam.nHttpCode = 400 ;
231+ HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
232+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
233+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" WEBDAV客户端:%s,处理WEBDAV协议DELETE方法失败,获取BUCKET失败,URL:%s" ), lpszClientAddr, pSt_HTTPParam->tszHttpUri );
234+ return false ;
235+ }
236+ int nFLen = 0 ;
237+ XCHAR tszFileName[MAX_PATH] = {};
238+ _tcsxcpy (tszFileName, pSt_HTTPParam->tszHttpUri + 1 );
239+ BaseLib_OperatorString_Replace (tszFileName, &nFLen, st_StorageBucket.tszBuckKey , st_StorageBucket.tszFilePath );
240+
241+ _xtremove (tszFileName);
242+ HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
243+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
244+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBDAV客户端:%s,处理WEBDAV协议DELETE方法成功,删除的文件:%s" ), lpszClientAddr, tszFileName);
245+ return true ;
246+ }
218247 else
219248 {
220249 st_HDRParam.bIsClose = true ;
0 commit comments