文件分享操作

本文档描述PDS的文件分享(share_link)功能,您可以使用PDS提供的默认客户端(BasicUI)使用,也可以参考本文档调用API完成文件分享操作。

基本概念

术语

含义

文件分享(share_link)

用于将用户空间中的一些文件或者文件夹授权给匿名用户访问。分享时可以设置截止时间和分享提取码,用于限制分享的可见时间和用户群。

分享者(share_link creator)

创建分享的那个user就是分享者,分享的文件来自其网盘空间中。

分享接收者(share_link receiver)

某个互联网用户从某个渠道获取到了分享访问页面,此页面一般带有分享码(share_id)信息并在适当时候提示用户输入分享提取码(share_pwd)验证分享访问权限,并使用以上信息访问了分享信息和分享文件信息,那么称其为分享接收者。

分享码(share_id)

唯一标识某个文件分享的字符串,除了创建分享以外,其他的分享操作都需要带上这个id,比如:sAvciMEXKRz。

分享提取码(share_pwd)

创建分享的时候设置,用于限制可访问此分享的用户群体。

分享令牌(x-share-token)

任何访问分享文件的操作(目录列举,文件查看,分享转存等)都需要提供分享令牌,和其他的token含义一样,用户表示访问者的身份信息。

分享接收者只会感知到分享提取码这个概念,而业务开发者在API调用过程中需要将分享提取码转化成分享令牌才能继续操作分享的文件。

分享操作流程

分享流程大体如下图所示

文件分享1

  1. 分享者创建分享

  2. 分享者将分享页面通过微信、论坛等渠道传播给分享接收者

  3. 分享接收者打开分享页面,查看分享基本信息,比如来自谁的分享,分享的截止时间等

  4. 如果分享需要鉴权,那么分享页面会提示接收者输入提取码进行验证

  5. 完成提取码鉴权后,分享接收者可以执行查看、转存、下载分享文件的操作

API调用示例

创建分享

在空间1中创建一个分享,包含有一个文件和一个文件夹

文件分享2

接口调用示例

POST /v2/share_link/create

需要登录态(access_token)鉴权

CreateShareLink - 创建分享

请求参数

{
    "drive_id": "1",
    "file_id_list": ["6407fca856abexxxxxx", "6407fca856abeyyyyyy"],
    "share_pwd": "abcd",
    "expiration": "2023-03-09T01:02:03.004Z",
    "share_name": "我是一个分享"
}

响应参数

{
    "share_id": "sAvciMEXKRz",
    "share_pwd": "abcd",
    "drive_id": "1",
    "file_id_list": ["6407fca856abexxxxxx", "6407fca856abeyyyyyy"],
    "expiration": "2023-03-09T01:02:03.004Z",
    "created_at": "2023-03-08T07:38:43.408Z"
}

匿名查看分享

下图展示了BasicUI中的匿名查看分享页面(集成了分享提取码验证功能),业务方可以自行定义这个页面。

文件分享3

接口调用示例

POST /v2/share_link/get_by_anonymous

无需鉴权

GetShareLinkByAnonymous - 匿名查看分享信息

请求参数

{
    "share_id": "sAvciMEXKRz"
}

响应参数

{
    "creator_id": "808d70cc528xxxxxxx",
    "creator_name": "张***",
    "creator_phone": "170***123",
    "expiration": "2023-03-09T01:02:03.004Z",
    "updated_at": "2023-03-08T07:38:43.408Z",
    "avatar": "https://xxx.com/yyyy",
    "share_name": "我是一个分享"
}

提取码验证(获取分享令牌)

POST /v2/share_link/get_share_token

无需鉴权,支持接入阿里云无痕验证,默认未开启

GetShareLinkToken - 获取分享令牌

请求参数

{
    "share_id": "sAvciMEXKRz",
    "share_pwd": "abcd"
}

响应参数

{
    "share_token": "eyJhbGciOiJSUzI1NiIsInR5cxx.yy.zz",
    "expire_time": "2023-03-08T09:51:10.634Z",
    "expires_in": 7200
}

列举分享目录

BasicUI中看到的列举分享目录的界面如下图所示

文件分享4

接口调用实例

POST /v2/file/list

需要分享令牌(x-share-token)鉴权。

分享中的文件和文件夹操作同drive中的文件操作(如上面的list),区别是鉴权改用分享令牌,drive_id改用share_id表示文件所在位置,除file/copy外均是如此,file/copy需要额外增加一个登录态来校验文件写入drive的权限。

ListFile - 列举文件

请求参数

{
    "share_id": "sAvciMEXKRz",
    "parent_file_id": "root"
}

响应参数

{
    "items": [
        {
            "drive_id": "1",
            "file_id": "6407fca856abexxxxxx",
            "share_id": "sAvciMEXKRz",
            "name": "我是一个分享的文件夹",
            "type": "folder",
            "created_at": "2023-02-17T06:42:30.975Z",
            "updated_at": "2023-02-17T06:42:30.975Z",
            "parent_file_id": "root"
        },
        {
            "drive_id": "1",
            "file_id": "6407fca856abeyyyyyy",
            "share_id": "sAvciMEXKRz",
            "name": "文件1.txt",
            "type": "folder",
            "created_at": "2023-02-17T06:42:31.453Z",
            "updated_at": "2023-02-17T06:42:31.453Z",
            "parent_file_id": "root"
        }
    ],
    "next_marker": ""
}

查看分享文件

POST /v2/file/get

需要分享令牌(x-share-token)鉴权

GetFile - 获取文件详情

请求参数

{
    "share_id": "sAvciMEXKRz",
    "file_id": "6407fca856abexxxxxx"
}

响应参数

{
    "file_id": "6407fca856abexxxxxx",
    "share_id": "sAvciMEXKRz",
    "name": "我是一个分享的文件夹",
    "type": "folder",
    "created_at": "2023-03-08T03:10:32.289Z",
    "updated_at": "2023-03-08T03:10:32.289Z",
    "parent_file_id": "root"
}

转存分享文件

POST /v2/file/copy

需要登录态(access_token)和分享令牌(x-share-token)鉴权,登录态用于校验写入drive文件的权限,分享令牌用于校验读取分享文件的权限

CopyFile - 复制文件或文件夹

请求参数

{
    "share_id": "sAvciMEXKRz",
    "file_id": "6407fca856abexxxxxx",
    "to_drive_id": "101",
    "to_parent_file_id": "root"
}

响应参数

{
    "drive_id": "101",
    "file_id": "6407fca856abexxxxxx",
    "async_task_id": "27a6xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}