Object.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. <?php
  2. require_once __DIR__ . '/Common.php';
  3. use OSS\OssClient;
  4. use OSS\Core\OssException;
  5. $bucket = Common::getBucketName();
  6. $ossClient = Common::getOssClient();
  7. if (is_null($ossClient)) exit(1);
  8. //*******************************简单使用***************************************************************
  9. // 简单上传变量的内容到文件
  10. $ossClient->putObject($bucket, "b.file", "hi, oss");
  11. Common::println("b.file is created");
  12. // 上传本地文件
  13. $ossClient->uploadFile($bucket, "c.file", __FILE__);
  14. Common::println("c.file is created");
  15. // 下载object到本地变量
  16. $content = $ossClient->getObject($bucket, "b.file");
  17. Common::println("b.file is fetched, the content is: " . $content);
  18. // 下载object到本地文件
  19. $options = array(
  20. OssClient::OSS_FILE_DOWNLOAD => "./c.file.localcopy",
  21. );
  22. $ossClient->getObject($bucket, "c.file", $options);
  23. Common::println("b.file is fetched to the local file: c.file.localcopy");
  24. // 拷贝object
  25. $ossClient->copyObject($bucket, "c.file", $bucket, "c.file.copy");
  26. Common::println("c.file is copied to c.file.copy");
  27. // 判断object是否存在
  28. $doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
  29. Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
  30. // 删除object
  31. $ossClient->deleteObject($bucket, "c.file.copy");
  32. Common::println("c.file.copy is deleted");
  33. // 判断object是否存在
  34. $doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
  35. Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
  36. // 批量删除object
  37. $ossClient->deleteObjects($bucket, array("b.file", "c.file"));
  38. Common::println("b.file, c.file are deleted");
  39. sleep(2);
  40. unlink("c.file.localcopy");
  41. //******************************* 完整用法参考下面函数 ****************************************************
  42. listObjects($ossClient, $bucket);
  43. listAllObjects($ossClient, $bucket);
  44. createObjectDir($ossClient, $bucket);
  45. putObject($ossClient, $bucket);
  46. uploadFile($ossClient, $bucket);
  47. getObject($ossClient, $bucket);
  48. getObjectToLocalFile($ossClient, $bucket);
  49. copyObject($ossClient, $bucket);
  50. modifyMetaForObject($ossClient, $bucket);
  51. getObjectMeta($ossClient, $bucket);
  52. deleteObject($ossClient, $bucket);
  53. deleteObjects($ossClient, $bucket);
  54. doesObjectExist($ossClient, $bucket);
  55. /**
  56. * 创建虚拟目录
  57. *
  58. * @param OssClient $ossClient OssClient实例
  59. * @param string $bucket 存储空间名称
  60. * @return null
  61. */
  62. function createObjectDir($ossClient, $bucket)
  63. {
  64. try {
  65. $ossClient->createObjectDir($bucket, "dir");
  66. } catch (OssException $e) {
  67. printf(__FUNCTION__ . ": FAILED\n");
  68. printf($e->getMessage() . "\n");
  69. return;
  70. }
  71. print(__FUNCTION__ . ": OK" . "\n");
  72. }
  73. /**
  74. * 把本地变量的内容到文件
  75. *
  76. * 简单上传,上传指定变量的内存值作为object的内容
  77. *
  78. * @param OssClient $ossClient OssClient实例
  79. * @param string $bucket 存储空间名称
  80. * @return null
  81. */
  82. function putObject($ossClient, $bucket)
  83. {
  84. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  85. $content = file_get_contents(__FILE__);
  86. $options = array();
  87. try {
  88. $ossClient->putObject($bucket, $object, $content, $options);
  89. } catch (OssException $e) {
  90. printf(__FUNCTION__ . ": FAILED\n");
  91. printf($e->getMessage() . "\n");
  92. return;
  93. }
  94. print(__FUNCTION__ . ": OK" . "\n");
  95. }
  96. /**
  97. * 上传指定的本地文件内容
  98. *
  99. * @param OssClient $ossClient OssClient实例
  100. * @param string $bucket 存储空间名称
  101. * @return null
  102. */
  103. function uploadFile($ossClient, $bucket)
  104. {
  105. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  106. $filePath = __FILE__;
  107. $options = array();
  108. try {
  109. $ossClient->uploadFile($bucket, $object, $filePath, $options);
  110. } catch (OssException $e) {
  111. printf(__FUNCTION__ . ": FAILED\n");
  112. printf($e->getMessage() . "\n");
  113. return;
  114. }
  115. print(__FUNCTION__ . ": OK" . "\n");
  116. }
  117. /**
  118. * 列出Bucket内所有目录和文件, 注意如果符合条件的文件数目超过设置的max-keys, 用户需要使用返回的nextMarker作为入参,通过
  119. * 循环调用ListObjects得到所有的文件,具体操作见下面的 listAllObjects 示例
  120. *
  121. * @param OssClient $ossClient OssClient实例
  122. * @param string $bucket 存储空间名称
  123. * @return null
  124. */
  125. function listObjects($ossClient, $bucket)
  126. {
  127. $prefix = 'oss-php-sdk-test/';
  128. $delimiter = '/';
  129. $nextMarker = '';
  130. $maxkeys = 1000;
  131. $options = array(
  132. 'delimiter' => $delimiter,
  133. 'prefix' => $prefix,
  134. 'max-keys' => $maxkeys,
  135. 'marker' => $nextMarker,
  136. );
  137. try {
  138. $listObjectInfo = $ossClient->listObjects($bucket, $options);
  139. } catch (OssException $e) {
  140. printf(__FUNCTION__ . ": FAILED\n");
  141. printf($e->getMessage() . "\n");
  142. return;
  143. }
  144. print(__FUNCTION__ . ": OK" . "\n");
  145. $objectList = $listObjectInfo->getObjectList(); // 文件列表
  146. $prefixList = $listObjectInfo->getPrefixList(); // 目录列表
  147. if (!empty($objectList)) {
  148. print("objectList:\n");
  149. foreach ($objectList as $objectInfo) {
  150. print($objectInfo->getKey() . "\n");
  151. }
  152. }
  153. if (!empty($prefixList)) {
  154. print("prefixList: \n");
  155. foreach ($prefixList as $prefixInfo) {
  156. print($prefixInfo->getPrefix() . "\n");
  157. }
  158. }
  159. }
  160. /**
  161. * 列出Bucket内所有目录和文件, 根据返回的nextMarker循环得到所有Objects
  162. *
  163. * @param OssClient $ossClient OssClient实例
  164. * @param string $bucket 存储空间名称
  165. * @return null
  166. */
  167. function listAllObjects($ossClient, $bucket)
  168. {
  169. //构造dir下的文件和虚拟目录
  170. for ($i = 0; $i < 100; $i += 1) {
  171. $ossClient->putObject($bucket, "dir/obj" . strval($i), "hi");
  172. $ossClient->createObjectDir($bucket, "dir/obj" . strval($i));
  173. }
  174. $prefix = 'dir/';
  175. $delimiter = '/';
  176. $nextMarker = '';
  177. $maxkeys = 30;
  178. while (true) {
  179. $options = array(
  180. 'delimiter' => $delimiter,
  181. 'prefix' => $prefix,
  182. 'max-keys' => $maxkeys,
  183. 'marker' => $nextMarker,
  184. );
  185. var_dump($options);
  186. try {
  187. $listObjectInfo = $ossClient->listObjects($bucket, $options);
  188. } catch (OssException $e) {
  189. printf(__FUNCTION__ . ": FAILED\n");
  190. printf($e->getMessage() . "\n");
  191. return;
  192. }
  193. // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表
  194. $nextMarker = $listObjectInfo->getNextMarker();
  195. $listObject = $listObjectInfo->getObjectList();
  196. $listPrefix = $listObjectInfo->getPrefixList();
  197. var_dump(count($listObject));
  198. var_dump(count($listPrefix));
  199. if ($nextMarker === '') {
  200. break;
  201. }
  202. }
  203. }
  204. /**
  205. * 获取object的内容
  206. *
  207. * @param OssClient $ossClient OssClient实例
  208. * @param string $bucket 存储空间名称
  209. * @return null
  210. */
  211. function getObject($ossClient, $bucket)
  212. {
  213. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  214. $options = array();
  215. try {
  216. $content = $ossClient->getObject($bucket, $object, $options);
  217. } catch (OssException $e) {
  218. printf(__FUNCTION__ . ": FAILED\n");
  219. printf($e->getMessage() . "\n");
  220. return;
  221. }
  222. print(__FUNCTION__ . ": OK" . "\n");
  223. if (file_get_contents(__FILE__) === $content) {
  224. print(__FUNCTION__ . ": FileContent checked OK" . "\n");
  225. } else {
  226. print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
  227. }
  228. }
  229. /**
  230. * get_object_to_local_file
  231. *
  232. * 获取object
  233. * 将object下载到指定的文件
  234. *
  235. * @param OssClient $ossClient OssClient实例
  236. * @param string $bucket 存储空间名称
  237. * @return null
  238. */
  239. function getObjectToLocalFile($ossClient, $bucket)
  240. {
  241. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  242. $localfile = "upload-test-object-name.txt";
  243. $options = array(
  244. OssClient::OSS_FILE_DOWNLOAD => $localfile,
  245. );
  246. try {
  247. $ossClient->getObject($bucket, $object, $options);
  248. } catch (OssException $e) {
  249. printf(__FUNCTION__ . ": FAILED\n");
  250. printf($e->getMessage() . "\n");
  251. return;
  252. }
  253. print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");
  254. if (file_get_contents($localfile) === file_get_contents(__FILE__)) {
  255. print(__FUNCTION__ . ": FileContent checked OK" . "\n");
  256. } else {
  257. print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
  258. }
  259. if (file_exists($localfile)) {
  260. unlink($localfile);
  261. }
  262. }
  263. /**
  264. * 拷贝object
  265. * 当目的object和源object完全相同时,表示修改object的meta信息
  266. *
  267. * @param OssClient $ossClient OssClient实例
  268. * @param string $bucket 存储空间名称
  269. * @return null
  270. */
  271. function copyObject($ossClient, $bucket)
  272. {
  273. $fromBucket = $bucket;
  274. $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
  275. $toBucket = $bucket;
  276. $toObject = $fromObject . '.copy';
  277. $options = array();
  278. try {
  279. $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options);
  280. } catch (OssException $e) {
  281. printf(__FUNCTION__ . ": FAILED\n");
  282. printf($e->getMessage() . "\n");
  283. return;
  284. }
  285. print(__FUNCTION__ . ": OK" . "\n");
  286. }
  287. /**
  288. * 修改Object Meta
  289. * 利用copyObject接口的特性:当目的object和源object完全相同时,表示修改object的meta信息
  290. *
  291. * @param OssClient $ossClient OssClient实例
  292. * @param string $bucket 存储空间名称
  293. * @return null
  294. */
  295. function modifyMetaForObject($ossClient, $bucket)
  296. {
  297. $fromBucket = $bucket;
  298. $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
  299. $toBucket = $bucket;
  300. $toObject = $fromObject;
  301. $copyOptions = array(
  302. OssClient::OSS_HEADERS => array(
  303. 'Cache-Control' => 'max-age=60',
  304. 'Content-Disposition' => 'attachment; filename="xxxxxx"',
  305. ),
  306. );
  307. try {
  308. $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);
  309. } catch (OssException $e) {
  310. printf(__FUNCTION__ . ": FAILED\n");
  311. printf($e->getMessage() . "\n");
  312. return;
  313. }
  314. print(__FUNCTION__ . ": OK" . "\n");
  315. }
  316. /**
  317. * 获取object meta, 也就是getObjectMeta接口
  318. *
  319. * @param OssClient $ossClient OssClient实例
  320. * @param string $bucket 存储空间名称
  321. * @return null
  322. */
  323. function getObjectMeta($ossClient, $bucket)
  324. {
  325. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  326. try {
  327. $objectMeta = $ossClient->getObjectMeta($bucket, $object);
  328. } catch (OssException $e) {
  329. printf(__FUNCTION__ . ": FAILED\n");
  330. printf($e->getMessage() . "\n");
  331. return;
  332. }
  333. print(__FUNCTION__ . ": OK" . "\n");
  334. if (isset($objectMeta[strtolower('Content-Disposition')]) &&
  335. 'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]
  336. ) {
  337. print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");
  338. } else {
  339. print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");
  340. }
  341. }
  342. /**
  343. * 删除object
  344. *
  345. * @param OssClient $ossClient OssClient实例
  346. * @param string $bucket 存储空间名称
  347. * @return null
  348. */
  349. function deleteObject($ossClient, $bucket)
  350. {
  351. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  352. try {
  353. $ossClient->deleteObject($bucket, $object);
  354. } catch (OssException $e) {
  355. printf(__FUNCTION__ . ": FAILED\n");
  356. printf($e->getMessage() . "\n");
  357. return;
  358. }
  359. print(__FUNCTION__ . ": OK" . "\n");
  360. }
  361. /**
  362. * 批量删除object
  363. *
  364. * @param OssClient $ossClient OssClient实例
  365. * @param string $bucket 存储空间名称
  366. * @return null
  367. */
  368. function deleteObjects($ossClient, $bucket)
  369. {
  370. $objects = array();
  371. $objects[] = "oss-php-sdk-test/upload-test-object-name.txt";
  372. $objects[] = "oss-php-sdk-test/upload-test-object-name.txt.copy";
  373. try {
  374. $ossClient->deleteObjects($bucket, $objects);
  375. } catch (OssException $e) {
  376. printf(__FUNCTION__ . ": FAILED\n");
  377. printf($e->getMessage() . "\n");
  378. return;
  379. }
  380. print(__FUNCTION__ . ": OK" . "\n");
  381. }
  382. /**
  383. * 判断object是否存在
  384. *
  385. * @param OssClient $ossClient OssClient实例
  386. * @param string $bucket 存储空间名称
  387. * @return null
  388. */
  389. function doesObjectExist($ossClient, $bucket)
  390. {
  391. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  392. try {
  393. $exist = $ossClient->doesObjectExist($bucket, $object);
  394. } catch (OssException $e) {
  395. printf(__FUNCTION__ . ": FAILED\n");
  396. printf($e->getMessage() . "\n");
  397. return;
  398. }
  399. print(__FUNCTION__ . ": OK" . "\n");
  400. var_dump($exist);
  401. }