/** * 上传操作 */ public function upload() { $uploaded = 0; while ($uploaded < $this->size) { $blockSize = $this->blockSize($uploaded); $data = fread($this->inputStream, $blockSize); if ($data === false) { throw new \Exception("file read failed", 1); } $crc = \Qiniu\crc32_data($data); $response = $this->makeBlock($data, $blockSize); $ret = null; if ($response->ok() && $response->json() != null) { $ret = $response->json(); } if ($response->statusCode < 0) { list($bakHost, $err) = $this->config->zone->getBackupUpHostByToken($this->upToken); if ($err != null) { return array(null, $err); } $this->host = $bakHost; } if ($response->needRetry() || !isset($ret['crc32']) || $crc != $ret['crc32']) { $response = $this->makeBlock($data, $blockSize); $ret = $response->json(); } if (!$response->ok() || !isset($ret['crc32']) || $crc != $ret['crc32']) { return array(null, new Error($this->currentUrl, $response)); } array_push($this->contexts, $ret['ctx']); $uploaded += $blockSize; } return $this->makeFile(); }
public function upload() { $uploaded = 0; while ($uploaded < $this->size) { $blockSize = $this->blockSize($uploaded); $data = fread($this->inputStream, $blockSize); if ($data === false) { fclose($this->inputStream); throw new Exception("file read failed", 1); } $crc = \Qiniu\crc32_data($data); $response = $this->makeBlock($data, $blockSize); $ret = null; if ($response->ok() && $response->json() != null) { $ret = $response->json(); } if ($response->statusCode < 0) { $this->host = Config::UPBACKUP_HOST; } if ($response->needRetry() || !isset($ret['crc32']) || $crc != $ret['crc32']) { $response = $this->makeBlock($data, $blockSize); $ret = $response->json(); } if (!$response->ok() || !isset($ret['crc32']) || $crc != $ret['crc32']) { fclose($this->inputStream); return array(null, new Error($this->currentUrl, $response)); } array_push($this->contexts, $ret['ctx']); $uploaded += $blockSize; } fclose($this->inputStream); return $this->makeFile(); }
/** * 上传二进制流到七牛, 内部使用 * * @param $upToken 上传凭证 * @param $key 上传文件名 * @param $data 上传二进制流 * @param $params 自定义变量,规格参考 * http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar * @param $mime 上传数据的mimeType * @param $checkCrc 是否校验crc32 * * @return array 包含已上传文件的信息,类似: * [ * "hash" => "<Hash string>", * "key" => "<Key string>" * ] */ public static function put($upToken, $key, $data, $config, $params, $mime, $checkCrc) { $fields = array('token' => $upToken); if ($key === null) { $fname = 'filename'; } else { $fname = $key; $fields['key'] = $key; } if ($checkCrc) { $fields['crc32'] = \Qiniu\crc32_data($data); } if ($params) { foreach ($params as $k => $v) { $fields[$k] = $v; } } list($upHost, $err) = $config->zone->getUpHostByToken($upToken); if ($err != null) { return array(null, $err); } $response = Client::multipartPost($upHost, $fields, 'file', $fname, $data, $mime); if (!$response->ok()) { return array(null, new Error($upHost, $response)); } return array($response->json(), null); }