1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70:
<?php
namespace LeanCloud\Uploader;
use LeanCloud\Client;
class QCloudUploader extends SimpleUploader {
protected static function getFileFieldName() {
return "filecontent";
}
public function upload($content, $mimeType, $key) {
$boundary = md5(microtime(true));
$body = $this->multipartEncode(array(
"name" => $key,
"mimeType" => $mimeType,
"content" => $content,
), array(
"op" => "upload",
"sha" => hash("sha1", $content)
), $boundary);
$headers[] = "User-Agent: " . Client::getVersionString();
$headers[] = "Content-Type: multipart/form-data;" .
" boundary={$boundary}";
$headers[] = "Authorization: {$this->getAuthToken()}";
$url = $this->getUploadUrl();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$resp = curl_exec($ch);
$respCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$respType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$error = curl_error($ch);
$errno = curl_errno($ch);
curl_close($ch);
if ($errno > 0) {
throw new \RuntimeException("CURL ($url) error: " .
"{$errno} {$error}",
$errno);
}
$data = json_decode($resp, true);
if ($data["code"] != 0) {
throw new \RuntimeException("Upload to Qcloud ({$url}) failed: ".
"{$data['code']} {$data['message']}",
$data["code"]);
}
return $data;
}
}