@@ -51,6 +51,7 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
5151 LPCXSTR lpszMethodOption = _X (" OPTIONS" );
5252 LPCXSTR lpszMethodPropfind = _X (" PROPFIND" );
5353 LPCXSTR lpszMethodGet = _X (" GET" );
54+ LPCXSTR lpszMethodPut = _X (" PUT" );
5455
5556 st_HDRParam.bIsClose = false ;
5657 st_HDRParam.nHttpCode = 200 ;
@@ -150,7 +151,43 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
150151
151152 HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszRequestAddr);
152153 XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
153- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBDAV客户端:%s,请求的文件被要求重定向到:%s" ), lpszClientAddr, tszRequestAddr);
154+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBDAV客户端:%s,请求文件下载被重定向到:%s" ), lpszClientAddr, tszRequestAddr);
155+ return true ;
156+ }
157+ else if (0 == _tcsxnicmp (lpszMethodPut, pSt_HTTPParam->tszHttpMethod , _tcsxlen (lpszMethodPut)))
158+ {
159+ // 使用重定向实现上传
160+ st_HDRParam.bIsClose = true ;
161+ st_HDRParam.nHttpCode = 302 ;
162+
163+ XCHAR tszRequestAddr[MAX_PATH] = {};
164+ XCHAR tszHostStr[128 ] = {};
165+ HttpProtocol_ServerHelp_GetField (&pptszListHdr, nHdrCount, _X (" Host" ), tszHostStr);
166+
167+ XCHAR tszPortWebdav[64 ] = {};
168+ XCHAR tszPortDownload[64 ] = {};
169+ _xstprintf (tszPortWebdav, _X (" %d" ), st_ServiceCfg.nWebdavPort );
170+ _xstprintf (tszPortDownload, _X (" %d" ), st_ServiceCfg.nStorageUPPort );
171+ // 转换端口
172+ APIHelp_Api_UrlChange (tszHostStr, tszPortWebdav, tszPortDownload);
173+ // 转换地址
174+ XCHAR tszStroageKey[MAX_PATH] = {};
175+ XCHAR tszFileName[MAX_PATH] = {};
176+
177+ int nRet = _stxscanf (pSt_HTTPParam->tszHttpUri + 1 , _T (" %99[^/]/%199[^\n ]" ), tszStroageKey, tszFileName);
178+ if (2 != nRet)
179+ {
180+ st_HDRParam.nHttpCode = 413 ;
181+ HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
182+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
183+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" WEBDAV客户端:%s,处理WEBDAV协议上传方法失败,文件请求路径不正确,URL:%s" ), lpszClientAddr, pSt_HTTPParam->tszHttpUri );
184+ return false ;
185+ }
186+ _xstprintf (tszRequestAddr, _X (" Location: http://%s/api?filename=%s&storeagekey=%s\r\n " ), tszHostStr, tszFileName, tszStroageKey);
187+
188+ HttpProtocol_Server_SendMsgEx (xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , 0 , tszRequestAddr);
189+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
190+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBDAV客户端:%s,请求文件上传被重定向到:%s" ), lpszClientAddr, tszRequestAddr);
154191 return true ;
155192 }
156193 else
0 commit comments