文件上传

文件上传适用于附件上传、文档上传等功能,均需要先把本地文件上传至腾讯云后,再把腾讯云接口返回的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

201 Created 状态码
{
    "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值。