rs.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <?php
  2. require_once ("http.php");
  3. // ----------------------------------------------------------
  4. // class Qiniu_RS_GetPolicy
  5. class Qiniu_RS_GetPolicy {
  6. public $Expires;
  7. public function MakeRequest($baseUrl, $mac) // => $privateUrl
  8. {
  9. $deadline = $this->Expires;
  10. if ($deadline == 0) {
  11. $deadline = 3600;
  12. }
  13. $deadline += time();
  14. $pos = strpos($baseUrl, '?');
  15. if ($pos !== false) {
  16. $baseUrl .= '&e=';
  17. } else {
  18. $baseUrl .= '?e=';
  19. }
  20. $baseUrl .= $deadline;
  21. $token = Qiniu_Sign($mac, $baseUrl);
  22. return "$baseUrl&token=$token";
  23. }
  24. }
  25. function Qiniu_RS_MakeBaseUrl($domain, $key) // => $baseUrl
  26. {
  27. $keyEsc = rawurlencode($key);
  28. return "http://$domain/$keyEsc";
  29. }
  30. // --------------------------------------------------------------------------------
  31. // class Qiniu_RS_PutPolicy
  32. class Qiniu_RS_PutPolicy {
  33. public $Scope;
  34. // 必填
  35. public $Expires;
  36. // 默认为3600s
  37. public $CallbackUrl;
  38. public $CallbackBody;
  39. public $ReturnUrl;
  40. public $ReturnBody;
  41. public $AsyncOps;
  42. public $EndUser;
  43. public $InsertOnly;
  44. // 若非0,则任何情况下无法覆盖上传
  45. public $DetectMime;
  46. // 若非0,则服务端根据内容自动确定MimeType
  47. public $FsizeLimit;
  48. public $SaveKey;
  49. public $PersistentOps;
  50. public $PersistentNotifyUrl;
  51. public $transform;
  52. public function __construct($scope, $params = null) {
  53. $this->Scope = $scope;
  54. if ($params['expires_in']) {
  55. $this->Expires = $params['expires_in'];
  56. }
  57. if ($params['callback_url']) {
  58. $this->CallbackUrl = $params['callback_url'];
  59. }
  60. if ($params['callback_body']) {
  61. $this->CallbackBody = $params['callback_body'];
  62. }
  63. if ($params['transform']) {
  64. $this->transform = $params['transform'];
  65. }
  66. /*
  67. * if($params['PersistentOps']){
  68. * $this->PersistentOps = $params['PersistentOps'];
  69. * }
  70. * if($params['PersistentNotifyUrl']){
  71. * $this->PersistentOps = $params['PersistentNotifyUrl'];
  72. * }
  73. */
  74. }
  75. public function Token($mac) // => $token
  76. {
  77. $deadline = $this->Expires;
  78. if ($deadline == 0) {
  79. $deadline = 3600;
  80. }
  81. $deadline += time();
  82. $policy = array(
  83. 'scope' => $this->Scope,
  84. 'deadline' => $deadline
  85. );
  86. if (! empty($this->CallbackUrl)) {
  87. $policy['callbackUrl'] = $this->CallbackUrl;
  88. }
  89. if (! empty($this->CallbackBody)) {
  90. $policy['callbackBody'] = $this->CallbackBody;
  91. }
  92. if (! empty($this->ReturnUrl)) {
  93. $policy['returnUrl'] = $this->ReturnUrl;
  94. }
  95. if (! empty($this->ReturnBody)) {
  96. $policy['returnBody'] = $this->ReturnBody;
  97. }
  98. if (! empty($this->AsyncOps)) {
  99. $policy['asyncOps'] = $this->AsyncOps;
  100. }
  101. if (! empty($this->EndUser)) {
  102. $policy['endUser'] = $this->EndUser;
  103. }
  104. if (! empty($this->InsertOnly)) {
  105. $policy['exclusive'] = $this->InsertOnly;
  106. }
  107. if (! empty($this->DetectMime)) {
  108. $policy['detectMime'] = $this->DetectMime;
  109. }
  110. if (! empty($this->FsizeLimit)) {
  111. $policy['fsizeLimit'] = $this->FsizeLimit;
  112. }
  113. if (! empty($this->SaveKey)) {
  114. $policy['saveKey'] = $this->SaveKey;
  115. }
  116. if (! empty($this->PersistentOps)) {
  117. $policy['persistentOps'] = $this->PersistentOps;
  118. }
  119. if (! empty($this->PersistentNotifyUrl)) {
  120. $policy['persistentNotifyUrl'] = $this->PersistentNotifyUrl;
  121. }
  122. if (! empty($this->transform)) {
  123. $policy['transform'] = $this->transform;
  124. }
  125. $b = json_encode($policy);
  126. return Qiniu_SignWithData($mac, $b);
  127. }
  128. }
  129. // ----------------------------------------------------------
  130. // class Qiniu_RS_EntryPath
  131. class Qiniu_RS_EntryPath {
  132. public $bucket;
  133. public $key;
  134. public function __construct($bucket, $key) {
  135. $this->bucket = $bucket;
  136. $this->key = $key;
  137. }
  138. }
  139. // ----------------------------------------------------------
  140. // class Qiniu_RS_EntryPathPair
  141. class Qiniu_RS_EntryPathPair {
  142. public $src;
  143. public $dest;
  144. public function __construct($src, $dest) {
  145. $this->src = $src;
  146. $this->dest = $dest;
  147. }
  148. }
  149. // ----------------------------------------------------------
  150. function Qiniu_RS_URIStat($bucket, $key) {
  151. return '/stat/' . Qiniu_Encode("$bucket:$key");
  152. }
  153. function Qiniu_RS_URIDelete($bucket, $key) {
  154. return '/delete/' . Qiniu_Encode("$bucket:$key");
  155. }
  156. function Qiniu_RS_URICopy($bucketSrc, $keySrc, $bucketDest, $keyDest) {
  157. return '/copy/' . Qiniu_Encode("$bucketSrc:$keySrc") . '/' . Qiniu_Encode("$bucketDest:$keyDest");
  158. }
  159. function Qiniu_RS_URIMove($bucketSrc, $keySrc, $bucketDest, $keyDest) {
  160. return '/move/' . Qiniu_Encode("$bucketSrc:$keySrc") . '/' . Qiniu_Encode("$bucketDest:$keyDest");
  161. }
  162. // ----------------------------------------------------------
  163. function Qiniu_RS_Stat($self, $bucket, $key) // => ($statRet, $error)
  164. {
  165. global $QINIU_RS_HOST;
  166. $uri = Qiniu_RS_URIStat($bucket, $key);
  167. return Qiniu_Client_Call($self, $QINIU_RS_HOST . $uri);
  168. }
  169. function Qiniu_RS_Delete($self, $bucket, $key) // => $error
  170. {
  171. global $QINIU_RS_HOST;
  172. $uri = Qiniu_RS_URIDelete($bucket, $key);
  173. return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . $uri);
  174. }
  175. function Qiniu_RS_Move($self, $bucketSrc, $keySrc, $bucketDest, $keyDest) // => $error
  176. {
  177. global $QINIU_RS_HOST;
  178. $uri = Qiniu_RS_URIMove($bucketSrc, $keySrc, $bucketDest, $keyDest);
  179. return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . $uri);
  180. }
  181. function Qiniu_RS_Copy($self, $bucketSrc, $keySrc, $bucketDest, $keyDest) // => $error
  182. {
  183. global $QINIU_RS_HOST;
  184. $uri = Qiniu_RS_URICopy($bucketSrc, $keySrc, $bucketDest, $keyDest);
  185. return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . $uri);
  186. }
  187. // ----------------------------------------------------------
  188. // batch
  189. function Qiniu_RS_Batch($self, $ops) // => ($data, $error)
  190. {
  191. global $QINIU_RS_HOST;
  192. $url = $QINIU_RS_HOST . '/batch';
  193. $params = 'op=' . implode('&op=', $ops);
  194. return Qiniu_Client_CallWithForm($self, $url, $params);
  195. }
  196. function Qiniu_RS_BatchStat($self, $entryPaths) {
  197. $params = array();
  198. foreach ($entryPaths as $entryPath) {
  199. $params[] = Qiniu_RS_URIStat($entryPath->bucket, $entryPath->key);
  200. }
  201. return Qiniu_RS_Batch($self, $params);
  202. }
  203. function Qiniu_RS_BatchDelete($self, $entryPaths) {
  204. $params = array();
  205. foreach ($entryPaths as $entryPath) {
  206. $params[] = Qiniu_RS_URIDelete($entryPath->bucket, $entryPath->key);
  207. }
  208. return Qiniu_RS_Batch($self, $params);
  209. }
  210. function Qiniu_RS_BatchMove($self, $entryPairs) {
  211. $params = array();
  212. foreach ($entryPairs as $entryPair) {
  213. $src = $entryPair->src;
  214. $dest = $entryPair->dest;
  215. $params[] = Qiniu_RS_URIMove($src->bucket, $src->key, $dest->bucket, $dest->key);
  216. }
  217. return Qiniu_RS_Batch($self, $params);
  218. }
  219. function Qiniu_RS_BatchCopy($self, $entryPairs) {
  220. $params = array();
  221. foreach ($entryPairs as $entryPair) {
  222. $src = $entryPair->src;
  223. $dest = $entryPair->dest;
  224. $params[] = Qiniu_RS_URICopy($src->bucket, $src->key, $dest->bucket, $dest->key);
  225. }
  226. return Qiniu_RS_Batch($self, $params);
  227. }
  228. // ----------------------------------------------------------