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: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
<?php
namespace LeanCloud\Uploader;
abstract class SimpleUploader {
protected $uploadUrl;
protected $authToken;
public static function createUploader($provider) {
if ($provider === "qiniu") {
return new QiniuUploader();
} else if ($provider === "s3") {
return new S3Uploader();
} else if ($provider === "qcloud") {
return new QCloudUploader();
}
throw new \RuntimeException("File provider not supported: {$provider}");
}
protected static function getFileFieldName() {
return "file";
}
public function multipartEncode($file, $params, $boundary) {
$body = "\r\n";
forEach($params as $key => $val) {
$body .= "--{$boundary}\r\n";
$body .= "Content-Disposition: form-data; name=\"{$key}\"\r\n\r\n";
$body .= "{$val}\r\n";
}
if (!empty($file)) {
$mimeType = "application/octet-stream";
if (isset($file["mimeType"])) {
$mimeType = $file["mimeType"];
}
$fieldname = static::getFileFieldName();
$filename = filter_var($file["name"],
FILTER_SANITIZE_MAGIC_QUOTES);
$body .= "--{$boundary}\r\n";
$body .= "Content-Disposition: form-data; name=\"{$fieldname}\"; filename=\"{$filename}\"\r\n";
$body .= "Content-Type: {$mimeType}\r\n\r\n";
$body .= "{$file['content']}\r\n";
}
$body .= "--{$boundary}--\r\n";
return $body;
}
public function initialize($uploadUrl, $authToken) {
$this->uploadUrl = $uploadUrl;
$this->authToken = $authToken;
}
public function getUploadUrl() {
return $this->uploadUrl;
}
public function getAuthToken() {
return $this->authToken;
}
abstract public function upload($content, $mimeType, $key);
}