php文件上传后端处理方法
if ($subFile['name'][$subKey])
{
$fileData = $this->_getFileData($subFile, $subKey);
$checkData = array(
'maxSize' => $apkConfig['FILE_MAX_SIZE'],
'savePath' => $apkConfig['TMP_CHILD_PATH'],
'extArr' => array('apk'),
'releaseName' => str_replace('.apk', '', $fileData['fileName']), //特有
);
$checkResult = $this->_checkFileData($fileData, $checkData);
if ($checkResult['status'] != 1)
{
$this->ajaxReturn($checkResult);
}
//移动文件
$filePath = $checkData['savePath'] . '/' . $fileData['fileName'] . '.tmp' . genRandStr(6);;
$this->_moveUploadedFile($fileData['tmpName'], $filePath);
$apkInfo = $this->_apkParser($filePath); //解析
if($apkInfo['UMENG_CHANNEL'] != 'UMENG_CHANNEL_VALUE')
{
@unlink($filePath); //删除无效文件
$this->ajaxReturn(array('status' => 0, 'info' => "UMENG_CHANNEL的值要是 UMENG_CHANNEL_VALUE才行"));
}
$tmpFileArr['file_info'] = array(
'name' => $subFile['name'][$subKey],
'type' => $subFile['type'][$subKey],
'tmp_name' => str_replace($apkConfig['TMP_CHILD_PATH'] . '/', '', $filePath),
'error' => $subFile['error'][$subKey],
'size' => $subFile['size'][$subKey],
); //转存该值,不再重复上传文件
}
else
{
$this->ajaxReturn(array('status' => 0, 'info' => "文件不能为空"));
}
foreach ($apkInfo as $key => $val)
{
$apkInfoHtml .= "{$key}:{$val} \r\n";
}
$apkName = $fileData['fileName'];
$version = $apkInfo['versionName'];
}
$fileInfo = htmlspecialchars(json_encode($tmpFileArr['file_info']));
$fileInfoHtml = ""; //一定要输出前使用htmlspecialchars, 否则不能正确显示页面值和获取至正确的文件信息
$this->ajaxReturn(array('status' => 1, 'info' => "上传成功", 'version' => $version, 'item' => $item, 'apkName' => $apkName, 'apkInfoHtml' => $apkInfoHtml, 'fileInfo' => $fileInfoHtml));
}
3. 通过以两部分代码的配合,我们在页面上已经有正确的信息了,只需要在最后提交表单的时候,不要将文件提交到服务器,在服务器端处理时,只需将之前上传的临时文件移动一下位置即可,这样就算大功告成了!
$('.upload-file-real').attr('disabled', 'disabled'); //提交表单前,禁用上传文件
4. 后续工作
将临时文件上传到服务器后,是没办法判断用户是否取消当前操作的,如果取消了,则临时文件将一直存在于服务器,所以,我们需要一个定时清理临时目录的脚本。当然,这个很简单,就只需要找到这个目录,比较一下时间,比如超过一天前的文件就给删除。注意控制清理频率即可!
5. 题外话
日志真的很重要,哪里出错了,哪里删除文件了,哪里清理数据库了,一定要做好记录!
上传文件到服务器临时目录,后端处理原理看起来很简单,但是也需要你仔细调试,至少当初我在做这个小功能时,着实费了不少劲才缕清楚的!
【php文件上传后端处理方法】相关文章: