OssClientObjectTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. <?php
  2. namespace OSS\Tests;
  3. use OSS\Core\OssException;
  4. use OSS\OssClient;
  5. require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
  6. class OssClientObjectTest extends TestOssClientBase
  7. {
  8. public function testGetObjectWithHeader()
  9. {
  10. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  11. try {
  12. $res = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_LAST_MODIFIED => "xx"));
  13. $this->assertEquals(file_get_contents(__FILE__), $res);
  14. } catch (OssException $e) {
  15. $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
  16. }
  17. }
  18. public function testGetObjectWithIleggalEtag()
  19. {
  20. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  21. try {
  22. $res = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_ETAG => "xx"));
  23. $this->assertEquals(file_get_contents(__FILE__), $res);
  24. } catch (OssException $e) {
  25. $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
  26. }
  27. }
  28. public function testPutIllelObject()
  29. {
  30. $object = "/ilegal.txt";
  31. try {
  32. $this->ossClient->putObject($this->bucket, $object, "hi", null);
  33. $this->assertFalse(true);
  34. } catch (OssException $e) {
  35. $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
  36. }
  37. }
  38. public function testObject()
  39. {
  40. /**
  41. * 上传本地变量到bucket
  42. */
  43. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  44. $content = file_get_contents(__FILE__);
  45. $options = array(
  46. OssClient::OSS_LENGTH => strlen($content),
  47. OssClient::OSS_HEADERS => array(
  48. 'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT',
  49. 'Cache-Control' => 'no-cache',
  50. 'Content-Disposition' => 'attachment;filename=oss_download.log',
  51. 'Content-Encoding' => 'utf-8',
  52. 'Content-Language' => 'zh-CN',
  53. 'x-oss-server-side-encryption' => 'AES256',
  54. 'x-oss-meta-self-define-title' => 'user define meta info',
  55. ),
  56. );
  57. try {
  58. $this->ossClient->putObject($this->bucket, $object, $content, $options);
  59. } catch (OssException $e) {
  60. $this->assertFalse(true);
  61. }
  62. try {
  63. $this->ossClient->deleteObjects($this->bucket, "stringtype", $options);
  64. $this->assertFalse(true);
  65. } catch (OssException $e) {
  66. $this->assertEquals('objects must be array', $e->getMessage());
  67. }
  68. try {
  69. $this->ossClient->uploadFile($this->bucket, $object, "notexist.txt", $options);
  70. $this->assertFalse(true);
  71. } catch (OssException $e) {
  72. $this->assertEquals('notexist.txt file does not exist', $e->getMessage());
  73. }
  74. /**
  75. * getObject到本地变量,检查是否match
  76. */
  77. try {
  78. $content = $this->ossClient->getObject($this->bucket, $object);
  79. $this->assertEquals($content, file_get_contents(__FILE__));
  80. } catch (OssException $e) {
  81. $this->assertFalse(true);
  82. }
  83. /**
  84. * getObject的前五个字节
  85. */
  86. try {
  87. $options = array(OssClient::OSS_RANGE => '0-4');
  88. $content = $this->ossClient->getObject($this->bucket, $object, $options);
  89. $this->assertEquals($content, '<?php');
  90. } catch (OssException $e) {
  91. $this->assertFalse(true);
  92. }
  93. /**
  94. * 上传本地文件到object
  95. */
  96. try {
  97. $this->ossClient->uploadFile($this->bucket, $object, __FILE__);
  98. } catch (OssException $e) {
  99. $this->assertFalse(true);
  100. }
  101. /**
  102. * 下载文件到本地变量,检查是否match
  103. */
  104. try {
  105. $content = $this->ossClient->getObject($this->bucket, $object);
  106. $this->assertEquals($content, file_get_contents(__FILE__));
  107. } catch (OssException $e) {
  108. $this->assertFalse(true);
  109. }
  110. /**
  111. * 下载文件到本地文件
  112. */
  113. $localfile = "upload-test-object-name.txt";
  114. $options = array(
  115. OssClient::OSS_FILE_DOWNLOAD => $localfile,
  116. );
  117. try {
  118. $this->ossClient->getObject($this->bucket, $object, $options);
  119. } catch (OssException $e) {
  120. $this->assertFalse(true);
  121. }
  122. $this->assertTrue(file_get_contents($localfile) === file_get_contents(__FILE__));
  123. if (file_exists($localfile)) {
  124. unlink($localfile);
  125. }
  126. /**
  127. * 复制object
  128. */
  129. $to_bucket = $this->bucket;
  130. $to_object = $object . '.copy';
  131. $options = array();
  132. try {
  133. $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object, $options);
  134. } catch (OssException $e) {
  135. $this->assertFalse(true);
  136. var_dump($e->getMessage());
  137. }
  138. /**
  139. * 检查复制的是否相同
  140. */
  141. try {
  142. $content = $this->ossClient->getObject($this->bucket, $to_object);
  143. $this->assertEquals($content, file_get_contents(__FILE__));
  144. } catch (OssException $e) {
  145. $this->assertFalse(true);
  146. }
  147. /**
  148. * 列出bucket内的文件列表
  149. */
  150. $prefix = '';
  151. $delimiter = '/';
  152. $next_marker = '';
  153. $maxkeys = 1000;
  154. $options = array(
  155. 'delimiter' => $delimiter,
  156. 'prefix' => $prefix,
  157. 'max-keys' => $maxkeys,
  158. 'marker' => $next_marker,
  159. );
  160. try {
  161. $listObjectInfo = $this->ossClient->listObjects($this->bucket, $options);
  162. $objectList = $listObjectInfo->getObjectList();
  163. $prefixList = $listObjectInfo->getPrefixList();
  164. $this->assertNotNull($objectList);
  165. $this->assertNotNull($prefixList);
  166. $this->assertTrue(is_array($objectList));
  167. $this->assertTrue(is_array($prefixList));
  168. } catch (OssException $e) {
  169. $this->assertTrue(false);
  170. }
  171. /**
  172. * 设置文件的meta信息
  173. */
  174. $from_bucket = $this->bucket;
  175. $from_object = "oss-php-sdk-test/upload-test-object-name.txt";
  176. $to_bucket = $from_bucket;
  177. $to_object = $from_object;
  178. $copy_options = array(
  179. OssClient::OSS_HEADERS => array(
  180. 'Expires' => '2012-10-01 08:00:00',
  181. 'Content-Disposition' => 'attachment; filename="xxxxxx"',
  182. ),
  183. );
  184. try {
  185. $this->ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object, $copy_options);
  186. } catch (OssException $e) {
  187. $this->assertFalse(true);
  188. }
  189. /**
  190. * 获取文件的meta信息
  191. */
  192. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  193. try {
  194. $objectMeta = $this->ossClient->getObjectMeta($this->bucket, $object);
  195. $this->assertEquals('attachment; filename="xxxxxx"', $objectMeta[strtolower('Content-Disposition')]);
  196. } catch (OssException $e) {
  197. $this->assertFalse(true);
  198. }
  199. /**
  200. * 删除单个文件
  201. */
  202. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  203. try {
  204. $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object));
  205. $this->ossClient->deleteObject($this->bucket, $object);
  206. $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object));
  207. } catch (OssException $e) {
  208. $this->assertFalse(true);
  209. }
  210. /**
  211. * 删除多个个文件
  212. */
  213. $object1 = "oss-php-sdk-test/upload-test-object-name.txt";
  214. $object2 = "oss-php-sdk-test/upload-test-object-name.txt.copy";
  215. $list = array($object1, $object2);
  216. try {
  217. $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object2));
  218. $this->ossClient->deleteObjects($this->bucket, $list, array('quiet' => true));
  219. $this->ossClient->deleteObjects($this->bucket, $list, array('quiet' => 'true'));
  220. $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object2));
  221. } catch (OssException $e) {
  222. $this->assertFalse(true);
  223. }
  224. }
  225. public function testAppendObject()
  226. {
  227. $object = "oss-php-sdk-test/append-test-object-name.txt";
  228. $content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
  229. /**
  230. * 追加上传字符串
  231. */
  232. try {
  233. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0);
  234. $this->assertEquals($position, strlen($content_array[0]));
  235. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[1], $position);
  236. $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]));
  237. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[2], $position);
  238. $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]) + strlen($content_array[1]));
  239. } catch (OssException $e) {
  240. $this->assertFalse(true);
  241. }
  242. /**
  243. * 检查内容的是否相同
  244. */
  245. try {
  246. $content = $this->ossClient->getObject($this->bucket, $object);
  247. $this->assertEquals($content, implode($content_array));
  248. } catch (OssException $e) {
  249. $this->assertFalse(true);
  250. }
  251. /**
  252. * 删除测试object
  253. */
  254. try {
  255. $this->ossClient->deleteObject($this->bucket, $object);
  256. } catch (OssException $e) {
  257. $this->assertFalse(true);
  258. }
  259. /**
  260. * 追加上传本地文件
  261. */
  262. try {
  263. $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0);
  264. $this->assertEquals($position, filesize(__FILE__));
  265. $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position);
  266. $this->assertEquals($position, filesize(__FILE__) * 2);
  267. } catch (OssException $e) {
  268. $this->assertFalse(true);
  269. }
  270. /**
  271. * 检查复制的是否相同
  272. */
  273. try {
  274. $content = $this->ossClient->getObject($this->bucket, $object);
  275. $this->assertEquals($content, file_get_contents(__FILE__) . file_get_contents(__FILE__));
  276. } catch (OssException $e) {
  277. $this->assertFalse(true);
  278. }
  279. /**
  280. * 删除测试object
  281. */
  282. try {
  283. $this->ossClient->deleteObject($this->bucket, $object);
  284. } catch (OssException $e) {
  285. $this->assertFalse(true);
  286. }
  287. $options = array(
  288. OssClient::OSS_HEADERS => array(
  289. 'Expires' => '2012-10-01 08:00:00',
  290. 'Content-Disposition' => 'attachment; filename="xxxxxx"',
  291. ),
  292. );
  293. /**
  294. * 带option的追加上传
  295. */
  296. try {
  297. $position = $this->ossClient->appendObject($this->bucket, $object, "Hello OSS, ", 0, $options);
  298. $position = $this->ossClient->appendObject($this->bucket, $object, "Hi OSS.", $position);
  299. } catch (OssException $e) {
  300. $this->assertFalse(true);
  301. }
  302. /**
  303. * 获取文件的meta信息
  304. */
  305. try {
  306. $objectMeta = $this->ossClient->getObjectMeta($this->bucket, $object);
  307. $this->assertEquals('attachment; filename="xxxxxx"', $objectMeta[strtolower('Content-Disposition')]);
  308. } catch (OssException $e) {
  309. $this->assertFalse(true);
  310. }
  311. /**
  312. * 删除测试object
  313. */
  314. try {
  315. $this->ossClient->deleteObject($this->bucket, $object);
  316. } catch (OssException $e) {
  317. $this->assertFalse(true);
  318. }
  319. }
  320. public function setUp()
  321. {
  322. parent::setUp();
  323. $this->ossClient->putObject($this->bucket, 'oss-php-sdk-test/upload-test-object-name.txt', file_get_contents(__FILE__));
  324. }
  325. }