Skip to content

Commit

Permalink
易用性优化:
Browse files Browse the repository at this point in the history
    1、path、fileName合并为一个参数
    2、文件、目录操作分开
    3、增加超时参数
    4、首尾'/'检查
    5、prefixSearch增加一个接口
    6、命名空间修改,防止用户同时使用cos、图片、视频会冲突
    7、签名有效期改为1分钟
    8、签名传入参数改为相对path,相对path不带appid、bucket前缀
  • Loading branch information
wangnan8791 committed Jul 23, 2015
1 parent 7ffbcd6 commit 72c9336
Show file tree
Hide file tree
Showing 8 changed files with 382 additions and 178 deletions.
66 changes: 45 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,44 +44,67 @@ g++ -o sample sample.cpp -I ./include/ -L. -L../cos-cpp-sdk/lib/ -lcosdk -lcurl
Cosapi::global_init();
Cosapi api("your appid",
"your secretId",
"your secretKey");
"your secretKey",
"interface timeout");

注意cos上的path以 / 开头

##计算多次签名,静态函数任何地方可以直接调用
string sign = Auth::appSign_more(
string sign = Auth::appSign(
"your appid", "",
"your secretId",
123, "bucketName");
"expired unix timestamp",
"bucketName");

##创建目录
//注意path以 / 结尾
api.createFolder(
"bucketName", "/test/");
cout << "retJson:" << api.retJson << endl;
cout << "retCode:" << api.retCode << endl;
cout << "retMsg:" << api.retMsg << endl;

##删除文件或者目录,目录必须以 / 结尾
api.del(
api.dump_res();

##listFolder目录下文件列表
api.listFolder("bucketName", "/", 10);
api.dump_res();

##prefixSearch前缀搜索
api.prefixSearch("bucketName", "/test", 10);
api.dump_res();

##更新目录属性
api.updateFolder(
bucketName, "/test/", "attr");
api.dump_res();

##更新文件属性
api.update(
bucketName, "/test.log", "attr");
api.dump_res();

##statFolder查询目录
api.statFolder(
bucketName, "/test/");
api.dump_res();

##stat查询文件
//可以用来判断文件是否存在
api.stat(
bucketName, "/test.log");
api.dump_res();

##删除目录
api.deleteFolder(
"bucketName", "/test/");
cout << "retJson:" << api.retJson << endl;
cout << "retCode:" << api.retCode << endl;
cout << "retMsg:" << api.retMsg << endl;
api.dump_res();

##list文件列表
api.list("bucketName", "/", 10);
cout << "retJson:" << api.retJson << endl;
cout << "retCode:" << api.retCode << endl;
cout << "retMsg:" << api.retMsg << endl;
##删除文件
api.del(
"bucketName", "/test.log");
api.dump_res();

##上传文件
api.upload(
"srcPath", "bucketName",-
"/dstPath");
cout << "retJson:" << api.retJson << endl;
cout << "retCode:" << api.retCode << endl;
cout << "retMsg:" << api.retMsg << endl;
api.dump_res();

##大文件分片上传
//sliceSize参数可以指定分片大小,默认是 512KB
Expand All @@ -90,4 +113,5 @@ g++ -o sample sample.cpp -I ./include/ -L. -L../cos-cpp-sdk/lib/ -lcosdk -lcurl
api.upload_slice(
"srcPath", "bucketName",-
"/dstPath", "", 3*1024*1024);
api.dump_res();

43 changes: 21 additions & 22 deletions include/Auth.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,40 +6,31 @@
#include <stdint.h>
using namespace std;

namespace Tencentyun {
namespace Qcloud_cos{

class Auth
{
static const int AUTH_URL_FORMAT_ERROR;
static const int AUTH_SECRET_ID_KEY_ERROR;
public:

/**
* 签名函数(上传、下载、查看资源会生成多次有效签名,
* 更新、删除资源会生成单次有效签名)
* @param uint64_t appId
* @param string secretId
* @param string secretKey
* @param uint64_t expired 过期时间,unix时间戳
* @param string fileId 文件路径,以 /{$appId}/{$bucketName} 开头
* 生成多次有效签名函数(用于上传和下载资源,有效期内可重复对不同资源使用)
* @param uint64_t expired 过期时间,unix时间戳
* @param string bucketName 文件所在bucket
*
* @return string sign 签名
*/

public:

static string appSign(
const uint64_t appId,
const string &secretId,
const string &secretKey,
const uint64_t expired,
const string &fileId,
const string &bucketName);

const string &bucketName);

/**
* 生成单次有效签名函数(用于删除和更新指定fileId资源,使用一次即失效)
* @param string fileId 文件路径,以 /{$appId}/{$bucketName} 开头
* 生成单次有效签名函数(用于删除和更新指定path的资源,使用一次即失效)
* @param string path 文件路径,以 '/' 开头
* @param string bucketName 文件所在bucket
*
* @return string sign 签名
Expand All @@ -48,26 +39,34 @@ class Auth
const uint64_t appId,
const string &secretId,
const string &secretKey,
const string &fileId,
const string &path,
const string &bucketName);

private:
/**
* 生成多次有效签名函数(用于上传和下载资源,有效期内可重复对不同资源使用)
* @param uint64_t expired 过期时间,unix时间戳
* 签名函数(上传、下载、查看资源需要多次有效签名,
* 更新、删除资源需要单次有效签名)
* @param uint64_t appId
* @param string secretId
* @param string secretKey
* @param uint64_t expired 过期时间,unix时间戳
* @param string fileId 资源全路径,格式为 /{$appId}/{$bucketName}/${path}
* @param string bucketName 文件所在bucket
*
* @return string sign 签名
*/
static string appSign_more(

static string appSignBase(
const uint64_t appId,
const string &secretId,
const string &secretKey,
const uint64_t expired,
const string &bucketName);
const string &fileId,
const string &bucketName);


};

}
}//namespace Qcloud_cos

#endif
110 changes: 96 additions & 14 deletions include/Cosapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

using namespace std;

namespace Tencentyun {
namespace Qcloud_cos{

class Cosapi
{
Expand Down Expand Up @@ -45,7 +45,8 @@ class Cosapi
Cosapi(
const uint64_t appid,
const string &secretId,
const string &secretKey);
const string &secretKey,
const uint64_t timeout = 30);
virtual ~Cosapi();


Expand Down Expand Up @@ -92,7 +93,7 @@ class Cosapi
/*
* 创建目录
* @param string bucketName
* @param string path 目录路径,必须以‘/’结尾
* @param string path 目录路径,sdk会补齐末尾的 '/'
*
*/
int createFolder(
Expand All @@ -102,17 +103,16 @@ class Cosapi
);

/*
* 目录列表,前缀搜索
* 目录列表
* @param string bucketName
* @param string path 目录路径 web.file.myqcloud.com/files/v1/[appid]/[bucket_name]/[DirName]/
* web.file.myqcloud.com/files/v1/appid/[bucket_name]/[DirName]/[prefix] <- 如果填写prefix, 则列出含此前缀的所有文件
* @param string path 目录路径,sdk会补齐末尾的 '/'
* @param int num 拉取的总数
* @param string pattern eListBoth,ListDirOnly,eListFileOnly 默认both
* @param string offset 透传字段,用于翻页,前端不需理解,需要往前/往后翻页则透传回来
* @param int num 拉取的总数
* @param int order 默认正序(=0), 填1为反序,
*
*/
int list(
int listFolder(
const string &bucketName,
const string &path,
const int num = 20,
Expand All @@ -122,9 +122,40 @@ class Cosapi
);

/*
* 目录/文件信息 update
* 前缀搜索
* @param string bucketName
* @param string path 路径,如果是目录则必须以‘/’结尾
* @param string prefix 列出含此前缀的所有文件
* @param int num 拉取的总数
* @param string pattern eListBoth,ListDirOnly,eListFileOnly 默认both
* @param string offset 透传字段,用于翻页,前端不需理解,需要往前/往后翻页则透传回来
* @param int order 默认正序(=0), 填1为反序,
*
*/
int prefixSearch(
const string &bucketName,
const string &prefix,
const int num = 20,
const string &pattern = "eListBoth",
const int order = 0,
const string &offset = ""
);

/*
* 目录信息 updateFolder
* @param string bucketName
* @param string path 路径,sdk会补齐末尾的 '/'
*
*/
int updateFolder(
const string &bucketName,
const string &path,
const string &biz_attr = ""
);

/*
* 文件信息 update
* @param string bucketName
* @param string path 路径
*
*/
int update(
Expand All @@ -134,9 +165,20 @@ class Cosapi
);

/*
* 目录/文件信息 查询
* 目录信息 查询
* @param string bucketName
* @param string path 路径,如果是目录则必须以‘/’结尾
* @param string path 路径,sdk会补齐末尾的 '/'
*
*/
int statFolder(
const string &bucketName,
const string &path
);

/*
* 文件信息 查询
* @param string bucketName
* @param string path 路径
*
*/
int stat(
Expand All @@ -145,7 +187,18 @@ class Cosapi
);

/*
* 删除文件及目录
* 删除目录
* @param string bucketName
* @param string path 路径,sdk会补齐末尾的 '/'
*
*/
int delFolder(
const string &bucketName,
const string &path
);

/*
* 删除文件
* @param string bucketName
* @param string path 路径,如果是目录则必须以‘/’结尾
*
Expand All @@ -158,6 +211,8 @@ class Cosapi
void dump_res();

private:
string validFolderPath(const string &path);
string validFilePath(const string &path);
int upload_prepare(
const uint64_t fileSize,
const string &sha,
Expand All @@ -178,8 +233,35 @@ class Cosapi
const uint64_t offset,
const string &session
);

int listBase(
const string &bucketName,
const string &path,
const int num = 20,
const string &pattern = "eListBoth",
const int order = 0,
const string &offset = ""
);

int updateBase(
const string &bucketName,
const string &path,
const string &biz_attr = ""
);

int statBase(
const string &bucketName,
const string &path
);

int delBase(
const string &bucketName,
const string &path
);

protected:
CURL * _curl_handle;
uint64_t _timeout;

public:
string response_str;
Expand All @@ -191,6 +273,6 @@ class Cosapi
};


}//namespace Tencentyun
}//namespace Qcloud_cos

#endif
Loading

0 comments on commit 72c9336

Please sign in to comment.