Object.php 13 KB

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