OssClientObjectTest.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. <?php
  2. namespace OSS\Tests;
  3. use OSS\Core\OssException;
  4. use OSS\Core\OssUtil;
  5. use OSS\OssClient;
  6. require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
  7. class OssClientObjectTest extends TestOssClientBase
  8. {
  9. public function testGetObjectMeta()
  10. {
  11. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  12. try {
  13. $res = $this->ossClient->getObjectMeta($this->bucket, $object);
  14. $this->assertEquals('200', $res['info']['http_code']);
  15. $this->assertEquals('text/plain', $res['content-type']);
  16. $this->assertEquals('Accept-Encoding', $res['vary']);
  17. $this->assertTrue(isset($res['content-encoding']));
  18. } catch (OssException $e) {
  19. $this->assertTrue(false);
  20. }
  21. $options = array(OssClient::OSS_HEADERS => array(OssClient::OSS_ACCEPT_ENCODING => 'deflate, gzip'));
  22. try {
  23. $res = $this->ossClient->getObjectMeta($this->bucket, $object, $options);
  24. $this->assertEquals('200', $res['info']['http_code']);
  25. $this->assertEquals('text/plain', $res['content-type']);
  26. $this->assertEquals('Accept-Encoding', $res['vary']);
  27. $this->assertEquals('gzip', $res['content-encoding']);
  28. } catch (OssException $e) {
  29. $this->assertTrue(false);
  30. }
  31. }
  32. public function testGetObjectWithAcceptEncoding()
  33. {
  34. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  35. $options = array(OssClient::OSS_HEADERS => array(OssClient::OSS_ACCEPT_ENCODING => 'deflate, gzip'));
  36. try {
  37. $res = $this->ossClient->getObject($this->bucket, $object, $options);
  38. $this->assertEquals(file_get_contents(__FILE__), $res);
  39. } catch (OssException $e) {
  40. $this->assertTrue(false);
  41. }
  42. }
  43. public function testGetObjectWithHeader()
  44. {
  45. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  46. try {
  47. $res = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_LAST_MODIFIED => "xx"));
  48. $this->assertEquals(file_get_contents(__FILE__), $res);
  49. } catch (OssException $e) {
  50. $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
  51. }
  52. }
  53. public function testGetObjectWithIleggalEtag()
  54. {
  55. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  56. try {
  57. $res = $this->ossClient->getObject($this->bucket, $object, array(OssClient::OSS_ETAG => "xx"));
  58. $this->assertEquals(file_get_contents(__FILE__), $res);
  59. } catch (OssException $e) {
  60. $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
  61. }
  62. }
  63. public function testObject()
  64. {
  65. /**
  66. * Upload the local variable to bucket
  67. */
  68. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  69. $content = file_get_contents(__FILE__);
  70. $options = array(
  71. OssClient::OSS_LENGTH => strlen($content),
  72. OssClient::OSS_HEADERS => array(
  73. 'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT',
  74. 'Cache-Control' => 'no-cache',
  75. 'Content-Disposition' => 'attachment;filename=oss_download.log',
  76. 'Content-Language' => 'zh-CN',
  77. 'x-oss-server-side-encryption' => 'AES256',
  78. 'x-oss-meta-self-define-title' => 'user define meta info',
  79. ),
  80. );
  81. try {
  82. $this->ossClient->putObject($this->bucket, $object, $content, $options);
  83. } catch (OssException $e) {
  84. $this->assertFalse(true);
  85. }
  86. try {
  87. $this->ossClient->putObject($this->bucket, $object, $content, $options);
  88. } catch (OssException $e) {
  89. $this->assertFalse(true);
  90. }
  91. try {
  92. $result = $this->ossClient->deleteObjects($this->bucket, "stringtype", $options);
  93. $this->assertEquals('stringtype', $result[0]);
  94. } catch (OssException $e) {
  95. $this->assertEquals('objects must be array', $e->getMessage());
  96. }
  97. try {
  98. $result = $this->ossClient->deleteObjects($this->bucket, "stringtype", $options);
  99. $this->assertFalse(true);
  100. } catch (OssException $e) {
  101. $this->assertEquals('objects must be array', $e->getMessage());
  102. }
  103. try {
  104. $this->ossClient->uploadFile($this->bucket, $object, "notexist.txt", $options);
  105. $this->assertFalse(true);
  106. } catch (OssException $e) {
  107. $this->assertEquals('notexist.txt file does not exist', $e->getMessage());
  108. }
  109. /**
  110. * GetObject to the local variable and check for match
  111. */
  112. try {
  113. $content = $this->ossClient->getObject($this->bucket, $object);
  114. $this->assertEquals($content, file_get_contents(__FILE__));
  115. } catch (OssException $e) {
  116. $this->assertFalse(true);
  117. }
  118. /**
  119. * GetObject first five bytes
  120. */
  121. try {
  122. $options = array(OssClient::OSS_RANGE => '0-4');
  123. $content = $this->ossClient->getObject($this->bucket, $object, $options);
  124. $this->assertEquals($content, '<?php');
  125. } catch (OssException $e) {
  126. $this->assertFalse(true);
  127. }
  128. /**
  129. * Upload the local file to object
  130. */
  131. try {
  132. $this->ossClient->uploadFile($this->bucket, $object, __FILE__);
  133. } catch (OssException $e) {
  134. $this->assertFalse(true);
  135. }
  136. /**
  137. * Download the file to the local variable and check for match.
  138. */
  139. try {
  140. $content = $this->ossClient->getObject($this->bucket, $object);
  141. $this->assertEquals($content, file_get_contents(__FILE__));
  142. } catch (OssException $e) {
  143. $this->assertFalse(true);
  144. }
  145. /**
  146. * Download the file to the local file
  147. */
  148. $localfile = "upload-test-object-name.txt";
  149. $options = array(
  150. OssClient::OSS_FILE_DOWNLOAD => $localfile,
  151. );
  152. try {
  153. $this->ossClient->getObject($this->bucket, $object, $options);
  154. } catch (OssException $e) {
  155. $this->assertFalse(true);
  156. }
  157. $this->assertTrue(file_get_contents($localfile) === file_get_contents(__FILE__));
  158. if (file_exists($localfile)) {
  159. unlink($localfile);
  160. }
  161. /**
  162. * Download the file to the local file. no such key
  163. */
  164. $localfile = "upload-test-object-name-no-such-key.txt";
  165. $options = array(
  166. OssClient::OSS_FILE_DOWNLOAD => $localfile,
  167. );
  168. try {
  169. $this->ossClient->getObject($this->bucket, $object . "no-such-key", $options);
  170. $this->assertTrue(false);
  171. } catch (OssException $e) {
  172. $this->assertTrue(true);
  173. $this->assertFalse(file_exists($localfile));
  174. if (strpos($e, "The specified key does not exist") == false) {
  175. $this->assertTrue(true);
  176. }
  177. }
  178. /**
  179. * Download the file to the content. no such key
  180. */
  181. try {
  182. $result = $this->ossClient->getObject($this->bucket, $object . "no-such-key");
  183. $this->assertTrue(false);
  184. } catch (OssException $e) {
  185. $this->assertTrue(true);
  186. if (strpos($e, "The specified key does not exist") == false) {
  187. $this->assertTrue(true);
  188. }
  189. }
  190. /**
  191. * Copy object
  192. */
  193. $to_bucket = $this->bucket;
  194. $to_object = $object . '.copy';
  195. $options = array();
  196. try {
  197. $result = $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object, $options);
  198. $this->assertFalse(empty($result));
  199. $this->assertEquals(strlen("2016-11-21T03:46:58.000Z"), strlen($result[0]));
  200. $this->assertEquals(strlen("\"5B3C1A2E053D763E1B002CC607C5A0FE\""), strlen($result[1]));
  201. } catch (OssException $e) {
  202. $this->assertFalse(true);
  203. var_dump($e->getMessage());
  204. }
  205. /**
  206. * Check if the replication is the same
  207. */
  208. try {
  209. $content = $this->ossClient->getObject($this->bucket, $to_object);
  210. $this->assertEquals($content, file_get_contents(__FILE__));
  211. } catch (OssException $e) {
  212. $this->assertFalse(true);
  213. }
  214. /**
  215. * List the files in your bucket.
  216. */
  217. $prefix = '';
  218. $delimiter = '/';
  219. $next_marker = '';
  220. $maxkeys = 1000;
  221. $options = array(
  222. 'delimiter' => $delimiter,
  223. 'prefix' => $prefix,
  224. 'max-keys' => $maxkeys,
  225. 'marker' => $next_marker,
  226. );
  227. try {
  228. $listObjectInfo = $this->ossClient->listObjects($this->bucket, $options);
  229. $objectList = $listObjectInfo->getObjectList();
  230. $prefixList = $listObjectInfo->getPrefixList();
  231. $this->assertNotNull($objectList);
  232. $this->assertNotNull($prefixList);
  233. $this->assertTrue(is_array($objectList));
  234. $this->assertTrue(is_array($prefixList));
  235. } catch (OssException $e) {
  236. $this->assertTrue(false);
  237. }
  238. /**
  239. * Set the meta information for the file
  240. */
  241. $from_bucket = $this->bucket;
  242. $from_object = "oss-php-sdk-test/upload-test-object-name.txt";
  243. $to_bucket = $from_bucket;
  244. $to_object = $from_object;
  245. $copy_options = array(
  246. OssClient::OSS_HEADERS => array(
  247. 'Expires' => '2012-10-01 08:00:00',
  248. 'Content-Disposition' => 'attachment; filename="xxxxxx"',
  249. ),
  250. );
  251. try {
  252. $this->ossClient->copyObject($from_bucket, $from_object, $to_bucket, $to_object, $copy_options);
  253. } catch (OssException $e) {
  254. $this->assertFalse(true);
  255. }
  256. /**
  257. * Get the meta information for the file
  258. */
  259. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  260. try {
  261. $objectMeta = $this->ossClient->getObjectMeta($this->bucket, $object);
  262. $this->assertEquals('attachment; filename="xxxxxx"', $objectMeta[strtolower('Content-Disposition')]);
  263. } catch (OssException $e) {
  264. $this->assertFalse(true);
  265. }
  266. /**
  267. * Delete single file
  268. */
  269. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  270. try {
  271. $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object));
  272. $this->ossClient->deleteObject($this->bucket, $object);
  273. $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object));
  274. } catch (OssException $e) {
  275. $this->assertFalse(true);
  276. }
  277. /**
  278. * Delete multiple files
  279. */
  280. $object1 = "oss-php-sdk-test/upload-test-object-name.txt";
  281. $object2 = "oss-php-sdk-test/upload-test-object-name.txt.copy";
  282. $list = array($object1, $object2);
  283. try {
  284. $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object2));
  285. $result = $this->ossClient->deleteObjects($this->bucket, $list);
  286. $this->assertEquals($list[0], $result[0]);
  287. $this->assertEquals($list[1], $result[1]);
  288. $result = $this->ossClient->deleteObjects($this->bucket, $list, array('quiet' => 'true'));
  289. $this->assertEquals(array(), $result);
  290. $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object2));
  291. $this->ossClient->putObject($this->bucket, $object, $content);
  292. $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object));
  293. $result = $this->ossClient->deleteObjects($this->bucket, $list, array('quiet' => true));
  294. $this->assertEquals(array(), $result);
  295. $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object));
  296. } catch (OssException $e) {
  297. $this->assertFalse(true);
  298. }
  299. }
  300. public function testAppendObject()
  301. {
  302. $object = "oss-php-sdk-test/append-test-object-name.txt";
  303. $content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
  304. /**
  305. * Append the upload string
  306. */
  307. try {
  308. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0);
  309. $this->assertEquals($position, strlen($content_array[0]));
  310. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[1], $position);
  311. $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]));
  312. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[2], $position, array(OssClient::OSS_LENGTH => strlen($content_array[2])));
  313. $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]) + strlen($content_array[2]));
  314. } catch (OssException $e) {
  315. $this->assertFalse(true);
  316. }
  317. /**
  318. * Check if the content is the same
  319. */
  320. try {
  321. $content = $this->ossClient->getObject($this->bucket, $object);
  322. $this->assertEquals($content, implode($content_array));
  323. } catch (OssException $e) {
  324. $this->assertFalse(true);
  325. }
  326. /**
  327. * Delete test object
  328. */
  329. try {
  330. $this->ossClient->deleteObject($this->bucket, $object);
  331. } catch (OssException $e) {
  332. $this->assertFalse(true);
  333. }
  334. /**
  335. * Append the upload of invalid local files
  336. */
  337. try {
  338. $position = $this->ossClient->appendFile($this->bucket, $object, "invalid-file-path", 0);
  339. $this->assertTrue(false);
  340. } catch (OssException $e) {
  341. $this->assertTrue(true);
  342. }
  343. /**
  344. * Append the upload of local files
  345. */
  346. try {
  347. $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0);
  348. $this->assertEquals($position, sprintf('%u', filesize(__FILE__)));
  349. $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position);
  350. $this->assertEquals($position, sprintf('%u', filesize(__FILE__)) * 2);
  351. } catch (OssException $e) {
  352. $this->assertFalse(true);
  353. }
  354. /**
  355. * Check if the replication is the same
  356. */
  357. try {
  358. $content = $this->ossClient->getObject($this->bucket, $object);
  359. $this->assertEquals($content, file_get_contents(__FILE__) . file_get_contents(__FILE__));
  360. } catch (OssException $e) {
  361. $this->assertFalse(true);
  362. }
  363. /**
  364. * Delete test object
  365. */
  366. try {
  367. $this->ossClient->deleteObject($this->bucket, $object);
  368. } catch (OssException $e) {
  369. $this->assertFalse(true);
  370. }
  371. $options = array(
  372. OssClient::OSS_HEADERS => array(
  373. 'Expires' => '2012-10-01 08:00:00',
  374. 'Content-Disposition' => 'attachment; filename="xxxxxx"',
  375. ),
  376. );
  377. /**
  378. * Append upload with option
  379. */
  380. try {
  381. $position = $this->ossClient->appendObject($this->bucket, $object, "Hello OSS, ", 0, $options);
  382. $position = $this->ossClient->appendObject($this->bucket, $object, "Hi OSS.", $position);
  383. } catch (OssException $e) {
  384. $this->assertFalse(true);
  385. }
  386. /**
  387. * Get the meta information for the file
  388. */
  389. try {
  390. $objectMeta = $this->ossClient->getObjectMeta($this->bucket, $object);
  391. $this->assertEquals('attachment; filename="xxxxxx"', $objectMeta[strtolower('Content-Disposition')]);
  392. } catch (OssException $e) {
  393. $this->assertFalse(true);
  394. }
  395. /**
  396. * Delete test object
  397. */
  398. try {
  399. $this->ossClient->deleteObject($this->bucket, $object);
  400. } catch (OssException $e) {
  401. $this->assertFalse(true);
  402. }
  403. }
  404. public function testPutIllelObject()
  405. {
  406. $object = "/ilegal.txt";
  407. try {
  408. $this->ossClient->putObject($this->bucket, $object, "hi", null);
  409. $this->assertFalse(true);
  410. } catch (OssException $e) {
  411. $this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
  412. }
  413. }
  414. public function testCheckMD5()
  415. {
  416. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  417. $content = file_get_contents(__FILE__);
  418. $options = array(OssClient::OSS_CHECK_MD5 => true);
  419. /**
  420. * Upload data to start MD5
  421. */
  422. try {
  423. $this->ossClient->putObject($this->bucket, $object, $content, $options);
  424. } catch (OssException $e) {
  425. $this->assertFalse(true);
  426. }
  427. /**
  428. * Check if the replication is the same
  429. */
  430. try {
  431. $content = $this->ossClient->getObject($this->bucket, $object);
  432. $this->assertEquals($content, file_get_contents(__FILE__));
  433. } catch (OssException $e) {
  434. $this->assertFalse(true);
  435. }
  436. /**
  437. * Upload file to start MD5
  438. */
  439. try {
  440. $this->ossClient->uploadFile($this->bucket, $object, __FILE__, $options);
  441. } catch (OssException $e) {
  442. $this->assertFalse(true);
  443. }
  444. /**
  445. * Check if the replication is the same
  446. */
  447. try {
  448. $content = $this->ossClient->getObject($this->bucket, $object);
  449. $this->assertEquals($content, file_get_contents(__FILE__));
  450. } catch (OssException $e) {
  451. $this->assertFalse(true);
  452. }
  453. /**
  454. * Delete test object
  455. */
  456. try {
  457. $this->ossClient->deleteObject($this->bucket, $object);
  458. } catch (OssException $e) {
  459. $this->assertFalse(true);
  460. }
  461. $object = "oss-php-sdk-test/append-test-object-name.txt";
  462. $content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
  463. $options = array(OssClient::OSS_CHECK_MD5 => true);
  464. /**
  465. * Append the upload string
  466. */
  467. try {
  468. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0, $options);
  469. $this->assertEquals($position, strlen($content_array[0]));
  470. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[1], $position, $options);
  471. $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]));
  472. $position = $this->ossClient->appendObject($this->bucket, $object, $content_array[2], $position, $options);
  473. $this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]) + strlen($content_array[1]));
  474. } catch (OssException $e) {
  475. $this->assertFalse(true);
  476. }
  477. /**
  478. * Check if the content is the same
  479. */
  480. try {
  481. $content = $this->ossClient->getObject($this->bucket, $object);
  482. $this->assertEquals($content, implode($content_array));
  483. } catch (OssException $e) {
  484. $this->assertFalse(true);
  485. }
  486. /**
  487. * Delete test object
  488. */
  489. try {
  490. $this->ossClient->deleteObject($this->bucket, $object);
  491. } catch (OssException $e) {
  492. $this->assertFalse(true);
  493. }
  494. /**
  495. * Append upload of local files
  496. */
  497. try {
  498. $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0, $options);
  499. $this->assertEquals($position, sprintf('%u', filesize(__FILE__)));
  500. $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position, $options);
  501. $this->assertEquals($position, sprintf('%u', filesize(__FILE__)) * 2);
  502. } catch (OssException $e) {
  503. $this->assertFalse(true);
  504. }
  505. /**
  506. * Check if the replication is the same
  507. */
  508. try {
  509. $content = $this->ossClient->getObject($this->bucket, $object);
  510. $this->assertEquals($content, file_get_contents(__FILE__) . file_get_contents(__FILE__));
  511. } catch (OssException $e) {
  512. $this->assertFalse(true);
  513. }
  514. /**
  515. * delete test object
  516. */
  517. try {
  518. $this->ossClient->deleteObject($this->bucket, $object);
  519. } catch (OssException $e) {
  520. $this->assertFalse(true);
  521. }
  522. }
  523. public function testWithInvalidBucketName()
  524. {
  525. try {
  526. $this->ossClient->createBucket("abcefc/", "test-key");
  527. $this->assertFalse(true);
  528. } catch (OssException $e) {
  529. $this->assertEquals('"abcefc/"bucket name is invalid', $e->getMessage());
  530. }
  531. }
  532. public function testGetSimplifiedObjectMeta()
  533. {
  534. $object = "oss-php-sdk-test/upload-test-object-name.txt";
  535. try {
  536. $objectMeta = $this->ossClient->getSimplifiedObjectMeta($this->bucket, $object);
  537. $this->assertEquals(false, array_key_exists(strtolower('Content-Disposition'), $objectMeta));
  538. $this->assertEquals(strlen(file_get_contents(__FILE__)), $objectMeta[strtolower('Content-Length')]);
  539. $this->assertEquals(true, array_key_exists(strtolower('ETag'), $objectMeta));
  540. $this->assertEquals(true, array_key_exists(strtolower('Last-Modified'), $objectMeta));
  541. } catch (OssException $e) {
  542. $this->assertFalse(true);
  543. }
  544. }
  545. public function testUploadStream()
  546. {
  547. $object = "oss-php-sdk-test/put-from-stream.txt";
  548. $options = array(OssClient::OSS_CHECK_MD5 => true);
  549. $handle = fopen(__FILE__, 'rb');
  550. /**
  551. * Upload data to start MD5
  552. */
  553. try {
  554. $this->ossClient->uploadStream($this->bucket, $object, $handle, $options);
  555. } catch (OssException $e) {
  556. $this->assertFalse(true);
  557. }
  558. /**
  559. * Check if the replication is the same
  560. */
  561. try {
  562. $content = $this->ossClient->getObject($this->bucket, $object);
  563. $this->assertEquals($content, file_get_contents(__FILE__));
  564. } catch (OssException $e) {
  565. $this->assertFalse(true);
  566. }
  567. $object = "oss-php-sdk-test/put-from-stream-without-md5.txt";
  568. $handle = fopen(__FILE__, 'rb');
  569. try {
  570. $this->ossClient->uploadStream($this->bucket, $object, $handle);
  571. } catch (OssException $e) {
  572. $this->assertFalse(true);
  573. }
  574. /**
  575. * Check if the replication is the same
  576. */
  577. try {
  578. $content = $this->ossClient->getObject($this->bucket, $object);
  579. $this->assertEquals($content, file_get_contents(__FILE__));
  580. } catch (OssException $e) {
  581. $this->assertFalse(true);
  582. }
  583. }
  584. public function testObjectKeyWithQuestionMark()
  585. {
  586. /**
  587. * Upload the local variable to bucket
  588. */
  589. $object = "oss-php-sdk-test/??/upload-test-object-name???123??123??.txt";
  590. $content = file_get_contents(__FILE__);
  591. $options = array(
  592. OssClient::OSS_LENGTH => strlen($content),
  593. OssClient::OSS_HEADERS => array(
  594. 'Expires' => 'Fri, 28 Feb 2020 05:38:42 GMT',
  595. 'Cache-Control' => 'no-cache',
  596. 'Content-Disposition' => 'attachment;filename=oss_download.log',
  597. 'Content-Language' => 'zh-CN',
  598. 'x-oss-server-side-encryption' => 'AES256',
  599. 'x-oss-meta-self-define-title' => 'user define meta info',
  600. ),
  601. );
  602. try {
  603. $this->ossClient->putObject($this->bucket, $object, $content, $options);
  604. } catch (OssException $e) {
  605. $this->assertFalse(true);
  606. }
  607. try {
  608. $this->ossClient->putObject($this->bucket, $object, $content, $options);
  609. } catch (OssException $e) {
  610. $this->assertFalse(true);
  611. }
  612. /**
  613. * GetObject to the local variable and check for match
  614. */
  615. try {
  616. $content = $this->ossClient->getObject($this->bucket, $object);
  617. $this->assertEquals($content, file_get_contents(__FILE__));
  618. } catch (OssException $e) {
  619. $this->assertFalse(true);
  620. }
  621. /**
  622. * GetObject first five bytes
  623. */
  624. try {
  625. $options = array(OssClient::OSS_RANGE => '0-4');
  626. $content = $this->ossClient->getObject($this->bucket, $object, $options);
  627. $this->assertEquals($content, '<?php');
  628. } catch (OssException $e) {
  629. $this->assertFalse(true);
  630. }
  631. /**
  632. * Upload the local file to object
  633. */
  634. try {
  635. $this->ossClient->uploadFile($this->bucket, $object, __FILE__);
  636. } catch (OssException $e) {
  637. $this->assertFalse(true);
  638. }
  639. /**
  640. * Download the file to the local variable and check for match.
  641. */
  642. try {
  643. $content = $this->ossClient->getObject($this->bucket, $object);
  644. $this->assertEquals($content, file_get_contents(__FILE__));
  645. } catch (OssException $e) {
  646. $this->assertFalse(true);
  647. }
  648. /**
  649. * Copy object
  650. */
  651. $to_bucket = $this->bucket;
  652. $to_object = $object . '.copy';
  653. $options = array();
  654. try {
  655. $result = $this->ossClient->copyObject($this->bucket, $object, $to_bucket, $to_object, $options);
  656. $this->assertFalse(empty($result));
  657. $this->assertEquals(strlen("2016-11-21T03:46:58.000Z"), strlen($result[0]));
  658. $this->assertEquals(strlen("\"5B3C1A2E053D763E1B002CC607C5A0FE\""), strlen($result[1]));
  659. } catch (OssException $e) {
  660. $this->assertFalse(true);
  661. var_dump($e->getMessage());
  662. }
  663. /**
  664. * Check if the replication is the same
  665. */
  666. try {
  667. $content = $this->ossClient->getObject($this->bucket, $to_object);
  668. $this->assertEquals($content, file_get_contents(__FILE__));
  669. } catch (OssException $e) {
  670. $this->assertFalse(true);
  671. }
  672. try {
  673. $this->assertTrue($this->ossClient->doesObjectExist($this->bucket, $object));
  674. $this->ossClient->deleteObject($this->bucket, $object);
  675. $this->assertFalse($this->ossClient->doesObjectExist($this->bucket, $object));
  676. } catch (OssException $e) {
  677. $this->assertFalse(true);
  678. }
  679. }
  680. public function testObjectKeyWithNonUTF8Name()
  681. {
  682. $object = "中文测试.txt";
  683. $hexObject = bin2hex($object);
  684. $gbkObject = iconv('UTF-8', 'GBK', $object);
  685. $hexGbkObject = bin2hex($gbkObject);
  686. $content = "hello world";
  687. $this->assertEquals("e4b8ade69687e6b58be8af952e747874", $hexObject);
  688. $this->assertEquals("d6d0cec4b2e2cad42e747874", $hexGbkObject);
  689. try {
  690. $this->ossClient->putObject($this->bucket, $gbkObject, $content);
  691. $this->assertTrue(false);
  692. } catch (OssException $e) {
  693. $this->assertEquals('InvalidArgument', $e->getErrorCode());
  694. $this->assertEquals('The characters encoding must be utf-8.', $e->getErrorMessage());
  695. } catch (\Exception $e) {
  696. $this->assertTrue(false);
  697. }
  698. //enable object encoding check
  699. $config = array(
  700. 'checkObjectEncoding' => true,
  701. );
  702. $ossClient = Common::getOssClient($config);
  703. try {
  704. $ossClient->putObject($this->bucket, $gbkObject, $content);
  705. $content1 = $this->ossClient->getObject($this->bucket, $object);
  706. $content2 = $ossClient->getObject($this->bucket, $gbkObject);
  707. $this->assertEquals($content, $content1);
  708. $this->assertEquals($content, $content2);
  709. } catch (\Exception $e) {
  710. $this->assertTrue(false);
  711. }
  712. // ascii
  713. try {
  714. $ossClient->putObject($this->bucket, '1234', 'ascii');
  715. $content1 = $this->ossClient->getObject($this->bucket, '1234');
  716. $content2 = $ossClient->getObject($this->bucket, '1234');
  717. $this->assertEquals('ascii', $content1);
  718. $this->assertEquals('ascii', $content2);
  719. } catch (\Exception $e) {
  720. $this->assertTrue(false);
  721. }
  722. }
  723. public function testEncodeFilePath()
  724. {
  725. if (!OssUtil::isWin()) {
  726. $this->assertTrue(true);
  727. return;
  728. }
  729. $fileFolder = __DIR__ . DIRECTORY_SEPARATOR . "中文目录";
  730. $filePath1 = $fileFolder . DIRECTORY_SEPARATOR . "中文文件名1.txt";
  731. $filePath2 = $fileFolder . DIRECTORY_SEPARATOR . "中文文件名2.txt";
  732. $gbkfileFolder = iconv('UTF-8', 'GBK', $fileFolder);
  733. $gbkfilePath1 = iconv('UTF-8', 'GBK', $filePath1);
  734. $gbkfilePath2 = iconv('UTF-8', 'GBK', $filePath2);
  735. $hexfilePath1 = bin2hex($filePath1);
  736. $hexGbkfilePath2 = bin2hex($gbkfilePath2);
  737. $content1 = '';
  738. $content2 = '';
  739. if (version_compare(phpversion(), '7.0.0', '<')) {
  740. try {
  741. mkdir($gbkfileFolder);
  742. } catch (\Exception $e) {
  743. }
  744. OssUtil::generateFile($gbkfilePath1, 200 * 1024);
  745. OssUtil::generateFile($gbkfilePath2, 202 * 1024);
  746. $content1 = file_get_contents($gbkfilePath1);
  747. $content2 = file_get_contents($gbkfilePath2);
  748. } else {
  749. try {
  750. mkdir($fileFolder);
  751. } catch (\Exception $e) {
  752. }
  753. OssUtil::generateFile($filePath1, 200 * 1024);
  754. OssUtil::generateFile($filePath2, 202 * 1024);
  755. $content1 = file_get_contents($filePath1);
  756. $content2 = file_get_contents($filePath2);
  757. }
  758. try {
  759. // upload file
  760. $this->ossClient->uploadFile($this->bucket, '123', $filePath1);
  761. $this->ossClient->uploadFile($this->bucket, '234', $gbkfilePath2);
  762. $res = $this->ossClient->getObject($this->bucket, '123');
  763. $this->assertEquals($content1, $res);
  764. $res = $this->ossClient->getObject($this->bucket, '234');
  765. $this->assertEquals($content2, $res);
  766. // append file
  767. $position = $this->ossClient->appendFile($this->bucket, 'append-file', $filePath1, 0);
  768. $position = $this->ossClient->appendFile($this->bucket, 'append-file', $gbkfilePath2, $position);
  769. $res = $this->ossClient->getObject($this->bucket, 'append-file');
  770. $this->assertEquals($content1.$content2, $res);
  771. // multi paet
  772. $this->ossClient->multiuploadFile($this->bucket, 'multi-file-123', $filePath1, array(OssClient::OSS_PART_SIZE => 1));
  773. $this->ossClient->multiuploadFile($this->bucket, 'multi-file-234', $gbkfilePath2, array(OssClient::OSS_PART_SIZE => 1));
  774. $res = $this->ossClient->getObject($this->bucket, 'multi-file-123');
  775. $this->assertEquals($content1, $res);
  776. $res = $this->ossClient->getObject($this->bucket, 'multi-file-234');
  777. $this->assertEquals($content2, $res);
  778. // uploadDir
  779. $this->ossClient->uploadDir($this->bucket, "dir", $fileFolder);
  780. $options = array(
  781. 'delimiter' => '',
  782. 'prefix' => "dir",
  783. );
  784. $listObjectInfo = $this->ossClient->listObjects($this->bucket, $options);
  785. $objectList = $listObjectInfo->getObjectList();
  786. $this->assertEquals(2, count($objectList));
  787. $this->assertEquals('dir/中文文件名1.txt', $objectList[0]->getKey());
  788. $this->assertEquals('dir/中文文件名2.txt', $objectList[1]->getKey());
  789. // uploadDir
  790. if (version_compare(phpversion(), '7.0.0', '<')) {
  791. $this->ossClient->uploadDir($this->bucket, "gbkdir", $gbkfileFolder);
  792. $options = array(
  793. 'delimiter' => '',
  794. 'prefix' => "gbkdir",
  795. );
  796. $listObjectInfo = $this->ossClient->listObjects($this->bucket, $options);
  797. $objectList = $listObjectInfo->getObjectList();
  798. $this->assertEquals(2, count($objectList));
  799. $this->assertEquals('gbkdir/中文文件名1.txt', $objectList[0]->getKey());
  800. $this->assertEquals('gbkdir/中文文件名2.txt', $objectList[1]->getKey());
  801. }
  802. } catch (OssException $e) {
  803. $this->assertFalse(true);
  804. }
  805. try {
  806. if (phpversion() < "7.0.0") {
  807. unlink($gbkfilePath1);
  808. unlink($gbkfilePath2);
  809. rmdir($gbkfileFolder);
  810. } else {
  811. unlink($filePath1);
  812. unlink($filePath2);
  813. rmdir($fileFolder);
  814. }
  815. } catch (\Exception $e) {
  816. }
  817. }
  818. protected function setUp(): void
  819. {
  820. parent::setUp();
  821. $this->ossClient->putObject($this->bucket, 'oss-php-sdk-test/upload-test-object-name.txt', file_get_contents(__FILE__));
  822. }
  823. }