Skip to content

Commit 4547c48

Browse files
committed
modify:webdav put method convert 302 support
1 parent 8cae983 commit 4547c48

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

XEngine_Source/XEngine_StorageApp/StorageApp_UPLoader.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
5151
memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM));
5252

5353
LPCXSTR lpszMethodPost = _X("POST");
54-
if (0 != _tcsxncmp(lpszMethodPost, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPost)))
54+
LPCXSTR lpszMethodPut = _X("PUT");
55+
56+
if ((0 != _tcsxncmp(lpszMethodPost, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPost))) && (0 != _tcsxncmp(lpszMethodPut, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodPut))))
5557
{
5658
st_HDRParam.bIsClose = true;
5759
st_HDRParam.nHttpCode = 405;

XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)