<?php include 'api_common.inc.php'; //$_GET['fid'] = des_decrypt(base64_decode($_GET['fid']), $TRIPLEDES_KEY, $TRIPLEDES_IV); //检查传参 if (empty($_GET['fid']) || empty($_GET['ppfeature']) || !isset($_GET['start']) || empty($_GET['end'])) { die(json_encode(array('err' => '403', 'msg' => 'fid or ppfeature or start or end empty', 'data' => array()))); } //得到ppfeature、start,end对应的upload_url $key = "{$_GET['start']}_{$_GET['end']}"; $ranges = api_cache($_GET['ppfeature'], $key); if (empty($ranges)) { die(json_encode(array('err' => 502, 'msg' => '传参start、end不对', 'data' => [$_GET, $_SERVER['REQUEST_URI'], $_SERVER['argv'], $_SERVER['SERVER_ADDR'], php_uname()]))); } //处理nginx接收到的文件 $target = UPLOAD_DIR . "/{$_GET['ppfeature']}"; @mkdir($target); $target .= "/{$key}"; rename($_GET['upload_tmp_path'], $target); //文件大小校验 if ($_GET['end'] - $_GET['start'] != filesize($target)) { die(json_encode(array('err' => 502, 'msg' => '文件不完整', 'data' => [$_GET, $_SERVER['REQUEST_URI'], $_SERVER['argv'], $_SERVER['SERVER_ADDR'], php_uname()]))); } //传swift $uploadId = send_put_file($ranges['upload_url'], $target); if (!$uploadId) { die(json_encode(array('err' => 500, 'msg' => '传文件至公有云出错', 'data' => array()))); } //通知已完成 $md5 = strtoupper($uploadId); $url = API_CLOUDPLAY . "/2/file/{$_GET['fid']}/action/uploaded?fromcp=private_cloud&range_md5={$md5}&bid={$ranges['bid']}&uploadid={$uploadId}";
ajaxReturn('', '公有云接口出错', 500); } //获取上传范围 $url = API_CLOUDPLAY . "/2/file/{$_POST['fid']}/action/uploadrange?fromcp=private_cloud&feature_pplive={$_POST['ppfeature']}&segs=1&asyncMD5=true"; if (!$IS_LOCAL) { $url .= '&inner=true'; } $json = send_get($url); $rangeRs = json_decode($json, 1); //如果已经上传完成,提交md5和feature if ($return['data']['fileSize'] == $return['data']['finished']) { //cli模式下异步提交最后的md5和feature $cacheDir = UPLOAD_DIR . "/cache/{$_POST['ppfeature']}"; if (is_dir($cacheDir)) { $binPath = strpos(PHP_OS, 'WIN') === false ? '/usr/local/php5/bin/php' : 'D:\\wamp\\bin\\php\\php5.5.12\\php.exe'; $binPath = $IS_LOCAL[0] == 'localhost.idc.pplive.cn' ? '/usr/local/php5.5.27/bin/php' : $binPath; $phpPath = __DIR__ . "/api_cli_curl.php {$_POST['fid']} {$_POST['ppfeature']}"; pclose(popen("{$binPath} {$phpPath} &", 'r')); } api_cache($_POST['ppfeature'], null); } else { if (empty($rangeRs['data']) || empty($rangeRs['data']['ranges'])) { ajaxReturn('', '公有云接口出错', 500); } $ranges = $rangeRs['data']['ranges'][0]; $return['data']['ranges'] = array('start' => $ranges['start'], 'end' => $ranges['end'] + 1); $key = $ranges['start'] . '_' . ($ranges['end'] + 1); api_cache($_POST['ppfeature'], $key, $ranges); } $return['data']['nextUrl'] = "{$URL_PREFIX}/uploadRange.php"; ajaxReturn($return['data'], 'success', 0);