Skip to content

Commit

Permalink
Merge 9e55e67 into 6d1de8d
Browse files Browse the repository at this point in the history
  • Loading branch information
ljbreak2008 committed Dec 27, 2017
2 parents 6d1de8d + 9e55e67 commit 799e3a5
Show file tree
Hide file tree
Showing 5 changed files with 215 additions and 2 deletions.
68 changes: 67 additions & 1 deletion samples/Object.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@
$content = $ossClient->getObject($bucket, "b.file");
Common::println("b.file is fetched, the content is: " . $content);

// 给object添加symlink
$content = $ossClient->putSymlink($bucket, "test-symlink", "b.file");
Common::println("test-symlink is created");
Common::println($result['x-oss-request-id']);
Common::println($result['etag']);

// 获取symlink
$content = $ossClient->getSymlink($bucket, "test-symlink");
Common::println("test-symlink refer to : " . $content['x-oss-symlink-target']);

// 下载object到本地文件
$options = array(
Expand Down Expand Up @@ -81,7 +90,8 @@
deleteObject($ossClient, $bucket);
deleteObjects($ossClient, $bucket);
doesObjectExist($ossClient, $bucket);

getSymlink($ossClient, $bucket);
putSymlink($ossClient, $bucket);
/**
* 创建虚拟目录
*
Expand Down Expand Up @@ -266,6 +276,62 @@ function getObject($ossClient, $bucket)
}
}

/**
* put symlink
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function putSymlink($ossClient, $bucket)
{
$symlink = "test-samples-symlink";
$object = "test-samples-object";
try {
$ossClient->putObject($bucket, $object, 'test-content');
$ossClient->putSymlink($bucket, $symlink, $object);
$content = $ossClient->getObject($bucket, $symlink);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
if ($content == 'test-content') {
print(__FUNCTION__ . ": putSymlink checked OK" . "\n");
} else {
print(__FUNCTION__ . ": putSymlink checked FAILED" . "\n");
}
}

/**
* 获取symlink
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function getSymlink($ossClient, $bucket)
{
$symlink = "test-samples-symlink";
$object = "test-samples-object";
try {
$ossClient->putObject($bucket, $object, 'test-content');
$ossClient->putSymlink($bucket, $symlink, $object);
$content = $ossClient->getSymlink($bucket, $symlink);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
if ($content['x-oss-symlink-target']) {
print(__FUNCTION__ . ": getSymlink checked OK" . "\n");
} else {
print(__FUNCTION__ . ": getSymlink checked FAILED" . "\n");
}
}

/**
* get_object_to_local_file
*
Expand Down
53 changes: 52 additions & 1 deletion src/OSS/OssClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
use OSS\Model\WebsiteConfig;
use OSS\Core\OssUtil;
use OSS\Model\ListPartsInfo;
use OSS\Result\SymlinkResult;

/**
* Class OssClient
Expand Down Expand Up @@ -1095,6 +1096,53 @@ public function putObject($bucket, $object, $content, $options = NULL)
return $result->getData();
}

/**
* 创建symlink
* @param string $bucket bucket名称
* @param string $symlink symlink名称
* @param string $targetObject 目标object名称
* @param array $options
* @return null
*/
public function putSymlink($bucket, $symlink ,$targetObject, $options = NULL)
{
$this->precheckCommon($bucket, $symlink, $options);

$options[self::OSS_BUCKET] = $bucket;
$options[self::OSS_METHOD] = self::OSS_HTTP_PUT;
$options[self::OSS_OBJECT] = $symlink;
$options[self::OSS_SUB_RESOURCE] = self::OSS_SYMLINK;
$options[self::OSS_HEADERS][self::OSS_SYMLINK_TARGET] = rawurlencode($targetObject);

$response = $this->auth($options);

$result = new PutSetDeleteResult($response);

return $result->getData();
}

/**
* 获取symlink
*@param string $bucket bucket名称
* @param string $symlink symlink名称
* @return null
*/
public function getSymlink($bucket, $symlink)
{
$this->precheckCommon($bucket, $symlink, $options);

$options[self::OSS_BUCKET] = $bucket;
$options[self::OSS_METHOD] = self::OSS_HTTP_GET;
$options[self::OSS_OBJECT] = $symlink;
$options[self::OSS_SUB_RESOURCE] = self::OSS_SYMLINK;

$response = $this->auth($options);

$result = new SymlinkResult($response);

return $result->getData();
}

/**
* 上传本地文件
*
Expand Down Expand Up @@ -2303,7 +2351,8 @@ private function generateSignableQueryStringParam($options)
self::OSS_LIVE_CHANNEL_START_TIME,
self::OSS_LIVE_CHANNEL_END_TIME,
self::OSS_PROCESS,
self::OSS_POSITION
self::OSS_POSITION,
self::OSS_SYMLINK,
);

foreach ($signableList as $item) {
Expand Down Expand Up @@ -2563,6 +2612,8 @@ public function setConnectTimeout($connectTimeout)
const OSS_DEFAULT_PREFIX = 'x-oss-';
const OSS_CHECK_MD5 = 'checkmd5';
const DEFAULT_CONTENT_TYPE = 'application/octet-stream';
const OSS_SYMLINK_TARGET = 'x-oss-symlink-target';
const OSS_SYMLINK = 'symlink';

//私有URL变量
const OSS_URL_ACCESS_KEY_ID = 'OSSAccessKeyId';
Expand Down
24 changes: 24 additions & 0 deletions src/OSS/Result/SymlinkResult.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace OSS\Result;

use OSS\Core\OssException;

/**
*
* @package OSS\Result
*/
class SymlinkResult extends Result
{
/**
* @return string
* @throws OssException
*/
protected function parseDataFromResponse()
{
$this->rawResponse->header[self::OSS_SYMLINK_TARGET] = rawurldecode($this->rawResponse->header[self::OSS_SYMLINK_TARGET]);

return $this->rawResponse->header;
}
const OSS_SYMLINK_TARGET = 'x-oss-symlink-target';
}
1 change: 1 addition & 0 deletions tests/OSS/Tests/OssClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -198,4 +198,5 @@ private function checkProxy($result, $proxys)
$this->assertEquals($result['info']['primary_port'], $proxys['port']);
$this->assertTrue(array_key_exists('via', $result));
}

}
71 changes: 71 additions & 0 deletions tests/OSS/Tests/SymlinkTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?php

namespace OSS\Tests;

use OSS\Result\SymlinkResult;
use OSS\Core\OssException;
use OSS\Http\ResponseCore;

require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';

class SymlinkTest extends TestOssClientBase
{
public function testPutSymlink()
{
$bucket = getenv('OSS_BUCKET');
$symlink = 'test-link';
$special_object = 'exist_object^$#!~';
$object = 'exist_object';

$this->ossClient ->putObject($bucket, $object, 'test_content');
$this->ossClient->putSymlink($bucket, $symlink, $object);
$result = $this->ossClient->getObject($bucket, $symlink);
$this->assertEquals('test_content', $result);

$this->ossClient ->putObject($bucket, $special_object, 'test_content');
$this->ossClient->putSymlink($bucket, $symlink, $special_object);
$result = $this->ossClient->getObject($bucket, $symlink);
$this->assertEquals('test_content', $result);
}

public function testGetSymlink()
{
$bucket = getenv('OSS_BUCKET');
$symlink = 'test-link';
$object = 'exist_object^$#!~';

$result = $this->ossClient->getSymlink($bucket, $symlink);
$this->assertEquals($result["x-oss-symlink-target"], $object);
$this->assertEquals('200', $result['info']['http_code']);
$this->assertTrue(isset($result['etag']));
$this->assertTrue(isset($result['x-oss-request-id']));
}

public function testPutNullSymlink()
{
$bucket = getenv('OSS_BUCKET');
$symlink = 'null-link';
$object_not_exist = 'not_exist_object+$#!b不';
$this->ossClient->putSymlink($bucket, $symlink, $object_not_exist);

try{
$this->ossClient->getObject($bucket, $symlink);
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('The symlink target object does not exist', $e->getErrorMessage());
}
}

public function testGetNullSymlink()
{
$bucket = getenv('OSS_BUCKET');
$symlink = 'null-link-new';

try{
$result = $this->ossClient->getSymlink($bucket, $symlink);
$this->assertTrue(false);
}catch (OssException $e){
$this->assertEquals('The specified key does not exist.', $e->getErrorMessage());
}
}
}

0 comments on commit 799e3a5

Please sign in to comment.