Skip to content

Commit 290442c

Browse files
Merge pull request #39 from aliyun/fix_md5
fix md5 check
2 parents 28ec537 + 6d964ba commit 290442c

File tree

3 files changed

+187
-11
lines changed

3 files changed

+187
-11
lines changed

src/OSS/OssClient.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,12 @@ public function putObject($bucket, $object, $content, $options = NULL)
987987
$options[self::OSS_CONTENT_LENGTH] = $options[self::OSS_LENGTH];
988988
}
989989

990+
$is_check_md5 = $this->isCheckMD5($options);
991+
if ($is_check_md5) {
992+
$content_md5 = base64_encode(md5($content, true));
993+
$options[self::OSS_CONTENT_MD5] = $content_md5;
994+
}
995+
990996
if (!isset($options[self::OSS_CONTENT_TYPE])) {
991997
$options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object);
992998
}
@@ -1065,6 +1071,12 @@ public function appendObject($bucket, $object, $content, $position, $options = N
10651071
} else {
10661072
$options[self::OSS_CONTENT_LENGTH] = $options[self::OSS_LENGTH];
10671073
}
1074+
1075+
$is_check_md5 = $this->isCheckMD5($options);
1076+
if ($is_check_md5) {
1077+
$content_md5 = base64_encode(md5($content, true));
1078+
$options[self::OSS_CONTENT_MD5] = $content_md5;
1079+
}
10681080

10691081
if (!isset($options[self::OSS_CONTENT_TYPE])) {
10701082
$options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object);

tests/OSS/Tests/OssClientMultipartUploadTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,29 @@ public function testMultipartUploadBigFile()
4040
unlink($bigFileName);
4141
unlink($localFilename);
4242
}
43+
44+
public function testMultipartUploadBigFileWithMD5Check()
45+
{
46+
$bigFileName = __DIR__ . DIRECTORY_SEPARATOR . "/bigfile.tmp";
47+
$localFilename = __DIR__ . DIRECTORY_SEPARATOR . "/localfile.tmp";
48+
OssUtil::generateFile($bigFileName, 6 * 1024 * 1024);
49+
$object = 'mpu/multipart-bigfile-test.tmp';
50+
$options = array(
51+
OssClient::OSS_CHECK_MD5 => true,
52+
OssClient::OSS_PART_SIZE => 1,
53+
);
54+
try {
55+
$this->ossClient->multiuploadFile($this->bucket, $object, $bigFileName, $options);
56+
$options = array(OssClient::OSS_FILE_DOWNLOAD => $localFilename);
57+
$this->ossClient->getObject($this->bucket, $object, $options);
58+
$this->assertEquals(md5_file($bigFileName), md5_file($localFilename));
59+
} catch (OssException $e) {
60+
var_dump($e->getMessage());
61+
$this->assertFalse(true);
62+
}
63+
unlink($bigFileName);
64+
unlink($localFilename);
65+
}
4366

4467
public function testCopyPart()
4568
{
@@ -263,6 +286,19 @@ public function testPutObjectByMultipartUpload()
263286
$this->assertFalse(true);
264287
}
265288
}
289+
290+
public function testPutObjectByMultipartUploadWithMD5Check()
291+
{
292+
$object = "mpu/multipart-test.txt";
293+
$file = __FILE__;
294+
$options = array(OssClient::OSS_CHECK_MD5 => true);
295+
296+
try {
297+
$this->ossClient->multiuploadFile($this->bucket, $object, $file, $options);
298+
} catch (OssException $e) {
299+
$this->assertFalse(true);
300+
}
301+
}
266302

267303
public function testListMultipartUploads()
268304
{

tests/OSS/Tests/OssClientObjectTest.php

Lines changed: 139 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,6 @@ public function testGetObjectWithIleggalEtag()
7575
}
7676
}
7777

78-
public function testPutIllelObject()
79-
{
80-
$object = "/ilegal.txt";
81-
try {
82-
$this->ossClient->putObject($this->bucket, $object, "hi", null);
83-
$this->assertFalse(true);
84-
} catch (OssException $e) {
85-
$this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
86-
}
87-
}
88-
8978
public function testObject()
9079
{
9180
/**
@@ -111,6 +100,12 @@ public function testObject()
111100
} catch (OssException $e) {
112101
$this->assertFalse(true);
113102
}
103+
104+
try {
105+
$this->ossClient->putObject($this->bucket, $object, $content, $options);
106+
} catch (OssException $e) {
107+
$this->assertFalse(true);
108+
}
114109

115110
try {
116111
$result = $this->ossClient->deleteObjects($this->bucket, "stringtype", $options);
@@ -417,6 +412,139 @@ public function testAppendObject()
417412
$this->assertFalse(true);
418413
}
419414
}
415+
416+
public function testPutIllelObject()
417+
{
418+
$object = "/ilegal.txt";
419+
try {
420+
$this->ossClient->putObject($this->bucket, $object, "hi", null);
421+
$this->assertFalse(true);
422+
} catch (OssException $e) {
423+
$this->assertEquals('"/ilegal.txt" object name is invalid', $e->getMessage());
424+
}
425+
}
426+
427+
public function testCheckMD5()
428+
{
429+
$object = "oss-php-sdk-test/upload-test-object-name.txt";
430+
$content = file_get_contents(__FILE__);
431+
$options = array(OssClient::OSS_CHECK_MD5 => true);
432+
433+
/**
434+
* 上传数据开启MD5
435+
*/
436+
try {
437+
$this->ossClient->putObject($this->bucket, $object, $content, $options);
438+
} catch (OssException $e) {
439+
$this->assertFalse(true);
440+
}
441+
442+
/**
443+
* 检查复制的是否相同
444+
*/
445+
try {
446+
$content = $this->ossClient->getObject($this->bucket, $object);
447+
$this->assertEquals($content, file_get_contents(__FILE__));
448+
} catch (OssException $e) {
449+
$this->assertFalse(true);
450+
}
451+
452+
/**
453+
* 上传文件开启MD5
454+
*/
455+
try {
456+
$this->ossClient->uploadFile($this->bucket, $object, __FILE__, $options);
457+
} catch (OssException $e) {
458+
$this->assertFalse(true);
459+
}
460+
461+
/**
462+
* 检查复制的是否相同
463+
*/
464+
try {
465+
$content = $this->ossClient->getObject($this->bucket, $object);
466+
$this->assertEquals($content, file_get_contents(__FILE__));
467+
} catch (OssException $e) {
468+
$this->assertFalse(true);
469+
}
470+
471+
/**
472+
* 删除测试object
473+
*/
474+
try {
475+
$this->ossClient->deleteObject($this->bucket, $object);
476+
} catch (OssException $e) {
477+
$this->assertFalse(true);
478+
}
479+
480+
$object = "oss-php-sdk-test/append-test-object-name.txt";
481+
$content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
482+
$options = array(OssClient::OSS_CHECK_MD5 => true);
483+
484+
/**
485+
* 追加上传字符串
486+
*/
487+
try {
488+
$position = $this->ossClient->appendObject($this->bucket, $object, $content_array[0], 0, $options);
489+
$this->assertEquals($position, strlen($content_array[0]));
490+
$position = $this->ossClient->appendObject($this->bucket, $object, $content_array[1], $position, $options);
491+
$this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]));
492+
$position = $this->ossClient->appendObject($this->bucket, $object, $content_array[2], $position, $options);
493+
$this->assertEquals($position, strlen($content_array[0]) + strlen($content_array[1]) + strlen($content_array[1]));
494+
} catch (OssException $e) {
495+
$this->assertFalse(true);
496+
}
497+
498+
/**
499+
* 检查内容的是否相同
500+
*/
501+
try {
502+
$content = $this->ossClient->getObject($this->bucket, $object);
503+
$this->assertEquals($content, implode($content_array));
504+
} catch (OssException $e) {
505+
$this->assertFalse(true);
506+
}
507+
508+
/**
509+
* 删除测试object
510+
*/
511+
try {
512+
$this->ossClient->deleteObject($this->bucket, $object);
513+
} catch (OssException $e) {
514+
$this->assertFalse(true);
515+
}
516+
517+
/**
518+
* 追加上传本地文件
519+
*/
520+
try {
521+
$position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0, $options);
522+
$this->assertEquals($position, filesize(__FILE__));
523+
$position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position, $options);
524+
$this->assertEquals($position, filesize(__FILE__) * 2);
525+
} catch (OssException $e) {
526+
$this->assertFalse(true);
527+
}
528+
529+
/**
530+
* 检查复制的是否相同
531+
*/
532+
try {
533+
$content = $this->ossClient->getObject($this->bucket, $object);
534+
$this->assertEquals($content, file_get_contents(__FILE__) . file_get_contents(__FILE__));
535+
} catch (OssException $e) {
536+
$this->assertFalse(true);
537+
}
538+
539+
/**
540+
* 删除测试object
541+
*/
542+
try {
543+
$this->ossClient->deleteObject($this->bucket, $object);
544+
} catch (OssException $e) {
545+
$this->assertFalse(true);
546+
}
547+
}
420548

421549
public function setUp()
422550
{

0 commit comments

Comments
 (0)