@@ -94,16 +94,29 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
9494 int nRVMode = 0 ;
9595 int nRVCount = 0 ;
9696 int nHDSize = 0 ;
97+ _stprintf (tszFileDir, _T (" %s%s" ), st_ServiceCfg.st_XStorage .tszFileDir , pSt_HTTPParam->tszHttpUri );
98+
9799 if (!Session_UPStroage_Exist (lpszClientAddr))
98100 {
99101 int nPosStart = 0 ;
100102 int nPosEnd = 0 ;
101103 __int64x nPosCount = 0 ;
102104
103- XEngine_APPHelp_RangeFile (lpszClientAddr, &nPosStart, &nPosEnd, &nPosCount, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPUPLOADER);
104- RfcComponents_HttpServer_GetRecvModeEx (xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize);
105+ if (XEngine_APPHelp_RangeFile (lpszClientAddr, &nPosStart, &nPosEnd, &nPosCount, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPUPLOADER))
106+ {
107+ // 是否启用了断点续传
108+ if (!st_ServiceCfg.st_XStorage .bResumable )
109+ {
110+ st_HDRParam.bIsClose = TRUE ;
111+ st_HDRParam.nHttpCode = 416 ;
105112
106- _stprintf (tszFileDir, _T (" %s%s" ), st_ServiceCfg.st_XStorage .tszFileDir , pSt_HTTPParam->tszHttpUri );
113+ RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
114+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
115+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T (" 上传客户端:%s,请求断点续传上传文件失败,服务端关闭了此功能,文件:%s,错误:%lX" ), lpszClientAddr, tszFileDir, Session_GetLastError ());
116+ return FALSE ;
117+ }
118+ }
119+ RfcComponents_HttpServer_GetRecvModeEx (xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize);
107120 if (!Session_UPStroage_Insert (lpszClientAddr, tszFileDir, nPosCount, nRVCount, nPosStart, nPosEnd))
108121 {
109122 st_HDRParam.bIsClose = TRUE ;
@@ -124,6 +137,22 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
124137 RfcComponents_HttpServer_GetRecvModeEx (xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize);
125138 if (nHDSize >= nRVCount)
126139 {
140+ SESSION_STORAGEINFO st_StorageInfo;
141+ memset (&st_StorageInfo, ' \0 ' , sizeof (SESSION_STORAGEINFO));
142+
143+ Session_UPStroage_Close (lpszClientAddr);
144+ Session_UPStroage_GetInfo (lpszClientAddr, &st_StorageInfo);
145+ // 大小是否足够
146+ if (st_StorageInfo.ullCount != st_StorageInfo.ullFSize )
147+ {
148+ st_HDRParam.bIsClose = TRUE ;
149+ st_HDRParam.nHttpCode = 200 ;
150+ RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
151+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
152+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 上传客户端:%s,请求上传文件成功,文件名:%s,总大小:%lld,写入大小:%lld,文件不完整,需要等待断点续传完毕" ), lpszClientAddr, tszFileDir, st_StorageInfo.ullCount , st_StorageInfo.ullFSize );
153+ return TRUE ;
154+ }
155+
127156 int nHashLen = 0 ;
128157 UCHAR tszHashStr[MAX_PATH];
129158 XSTORAGECORE_DBFILE st_ProtocolFile;
0 commit comments