@@ -203,12 +203,61 @@ bool XEngine_Task_HttpUPLoader(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
203203 return false ;
204204 }
205205 }
206-
206+ // 修正文件路径
207207 int nPathType = 0 ;
208208 _xstprintf (tszFileDir, _X (" %s/%s" ), st_StorageBucket.tszFilePath , tszFileName);
209209 BaseLib_OperatorString_GetPath (tszFileDir, &nPathType);
210210 BaseLib_OperatorString_FixPath (tszFileDir, nPathType);
211+ // 得到上传大小
212+ XCHAR tszVluStr[8 ] = {};
213+ if (HttpProtocol_ServerHelp_GetField (&pptszListHdr, nHdrCount, _X (" Content-Length" ), tszVluStr))
214+ {
215+ if (0 == _ttxoi (tszVluStr))
216+ {
217+ if (st_StorageBucket.st_PermissionFlags .bUPReady )
218+ {
219+ // 文件是否存在
220+ if (0 == _xtaccess (tszFileDir, 0 ) && !st_StorageBucket.st_PermissionFlags .bRewrite )
221+ {
222+ st_HDRParam.bIsClose = true ;
223+ st_HDRParam.nHttpCode = 403 ;
224+ HttpProtocol_Server_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
225+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
226+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 上传客户端:%s,准备上传文件:%s 失败,文件已经存在" ), lpszClientAddr, tszFileDir);
227+ return true ;
228+ }
229+ // 文件是否可写
230+ FILE* pSt_File = _xtfopen (tszFileDir, _X (" wb" ));
231+ if (NULL != pSt_File)
232+ {
233+ st_HDRParam.bIsClose = true ;
234+ st_HDRParam.nHttpCode = 403 ;
235+ HttpProtocol_Server_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
236+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
237+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 上传客户端:%s,准备上传文件:%s 失败,创建文件失败" ), lpszClientAddr, tszFileDir);
238+ return true ;
239+ }
240+ fclose (pSt_File);
211241
242+ st_HDRParam.bIsClose = false ;
243+ st_HDRParam.nHttpCode = 201 ;
244+ HttpProtocol_Server_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
245+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
246+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 上传客户端:%s,准备上传文件:%s 成功" ), lpszClientAddr, tszFileDir);
247+ return true ;
248+ }
249+ else
250+ {
251+ st_HDRParam.bIsClose = true ;
252+ st_HDRParam.nHttpCode = 403 ;
253+ HttpProtocol_Server_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
254+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
255+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 上传客户端:%s,准备上传文件:%s 失败,服务器关闭了UPReady,无法继续" ), lpszClientAddr, pSt_HTTPParam->tszHttpUri );
256+ return true ;
257+ }
258+ }
259+ }
260+ // 开始处理文件
212261 if (!Session_UPStroage_Exist (lpszClientAddr))
213262 {
214263 int nPosStart = 0 ;
0 commit comments