文件上传适用于附件上传、文档上传等功能,均需要先把本地文件上传至腾讯云后,再把腾讯云接口返回的state
作为参数传递给乐享开放接口中。
本页文档主要介绍如何把本地文件上传至腾讯云并获取state
的步骤
state
参数的使用请参照应用接口中模块接口的说明
POST https://lxapi.lexiangla.com/cgi-bin/v1/docs/cos-param
headers.Authorization: Bearer {access_token}
headers.StaffID: {StaffID}
params
{
"filename": "测试.xlsx",
"type": "attachment"
}
参数 | 是否必须 | 默认值 | 说明 |
---|---|---|---|
filename | 是 | 无 | 文件名称 |
type | 是 | 无 | 获取签名类型,支持 attachment 和 file。attachment 表示附件上传,file 表示文档上传 |
params
{
"options": {
"Bucket": "lexiang4test-10029162",
"Region": "ap-shanghai"
},
"object":{
"key": "company_85535ed0c66311e5a2f8bf5011933e87/2019/04/9c8ac73e-618b-11e9-b72c-5254009b5a66.xlsx",
"state": "f36e6cc7-e8af-45ed-8e83-5cdb2e44b28b",
"headers": {
"Content-Type": "application/octet-stream",
"Content-Disposition": "attachment; filename=测试.xlsx"
},
"auth": {
"Authorization": "q-sign-algorithm=sha1&q-ak=AKIDD9V0xuzyP3J2BNp2xsVVZyoEg00tr9rg&q-sign-time=1555558785;1555559385&q-key-time=1555558785;1555559385&q-header-list=&q-url-param-list=&q-signature=ee9ccdb646009b6aa7362531ea2a8277471ab517",
"XCosSecurityToken": "be449e692ad8c270abf3dca539ccb511069021ea30001"
}
}
}
腾讯云COS存储提供了用于上传文件到COS存储桶的各类接口。本文使用接口 putObject ,指引用户如何将文件直接上传到腾讯云。
https://cloud.tencent.com/document/product/436/7749
PUT http://<bucket>.cos.<region>.myqcloud.com/<key>
例如:
http://lexiang4test-10029162.cos.ap-shanghai.myqcloud.com/company_d356c28a33bb11e8ad005254002b6735/attachments/2018/10/3c73103c-d053-11e8-b6ce-5254009b5a66.jpg
请求URL中:
参数名 | 是否必须 | 字段说明 | 备注 |
---|---|---|---|
bucket | 是 | 见第一部分响应参数中的object.options.bucket | |
region | 是 | 见第一部分响应参数中的object.options.region | |
key | 是 | 见第一部分响应参数中的object.key |
请求头中:
参数名 | 是否必须 | 字段说明 | 备注 |
---|---|---|---|
Authorization | 是 | 见第一部分响应参数中的objects.auth.Authorization | |
x-cos-security-token | 是 | 见第一部分响应参数中的objects.auth.XCosSecurityToken |
请求体中: 待上传的文件。
HTTP请求:
PUT /company_d356c28a33bb11e8ad005254002b6735/attachments/2018/10/3c73103c-d053-11e8-b6ce-5254009b5a66.jpg HTTP/1.1
Host: lexiang4test-10029162.cos.ap-shanghai.myqcloud.com
Authorization: q-sign-algorithm=sha1&q-ak=AKIDzXoRtcmsPNo7Yjgse6T6hn9RBEn0ryWQ&q-sign-time=1539229974;1539230574&q-key-time=1539229974;1539230574&q-header-list=&q-url-param-list=&q-signature=86448bcb9c84daf6f0395863498a987e9a97f50c
x-cos-security-token: b6fa3fd2e77dfaa26725e9c5f127fb34ac4efc3230001
[将文件通过Body上传]
使用PHP SDK:
/**
* 直接调用腾讯云COS的putObject接口上传文件。
* https://cloud.tencent.com/document/product/436/7749
* @param $object
* @param $options
* @return string 上传文件内容的 MD5 值
*/
function qcloudPutObject($object, $options)
{
$key = $object['key'];
$url = 'http://' . $options['Bucket'] . '.cos.' . $options['Region'] . '.myqcloud.com/' . $key;
$client = new \GuzzleHttp\Client();
$response = $client->put($url, [
'headers' => [
'Authorization' => $object['auth']['Authorization'],
'x-cos-security-token' => $object['auth']['XCosSecurityToken'],
] + $object['headers'],
'body' => fopen($object['filepath'], 'r'),
]);
$header = $response->getHeader('ETag');
$etag = isset($header[0]) ? $header[0] : '';
$etag = trim($etag, '"');
return $etag;
}
$object = [
'key' => 'company_d356c28a33bb11e8ad005254002b6735/attachments/2018/10/e77db970-d051-11e8-a33a-5254009b5a66.jpg',
'state' => 'c500f70e-5ba6-45c3-a1b5-35031cced8cd',
'headers' => [
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment; filename=test.jpg',
],
'auth' => [
'Authorization' => 'q-sign-algorithm=sha1&q-ak=AKIDewyDoX2TJkcc5zwDALuFQh7dPa5RFWnx&q-sign-time=1539591081;1539591681&q-key-time=1539591081;1539591681&q-header-list=&q-url-param-list=&q-signature=e12267adfe5d669fbf248c1bef8060d12784c872',
'XCosSecurityToken' => '9e7a82a9e66d6b0081cfaaf978e416ad8b8945f530001',
],
'filepath' => '../attachments/test.jpg',
];
$options = [
'Bucket' => 'lexiang4test-10029162',
'Region' => 'ap-shanghai',
];
$etag = qcloudPutObject($object, $options);
echo $etag;
成功的响应,响应头中有ETag字段,表示成功上传的对象的md5值。