test2

pcs uploader server

百度网盘同步服务.

测试AccessToken

https://pan.baidu.com/rest/2.0/xpan/nas?method=uinfo&access_token=

创建任务

POST /pcs/task/create

{
    "taskId": 123,
    "accessToken": "121.46244fe164854ecb78c5b3a78122fd59.YDlAzR4bfkEABd0xiIdEzUH5tnK09kZYk_VBUe8.CsdO9g",
    "createTime": 1626774286,
    "uploadDir": "hello",
    "isOverwrite": true,
    "callbackUrl": "http://media.suconghou.cn/upload.php"
}

文件上传后会分批回调此接口

回调数据

{
    "taskId": 123,
    "errorMsg": "",
    "status": 1,
    "photos": [
        1233,
        1234
    ]
}

status 0 正常 1 任务完成 2 任务异常终止

photos 数组始终表示的是成功的数据

失败的数据将在errorMsg中体现,每行一个

回调地址必须响应http状态码200,body字符串 ok 表示处理成功(无换行符)

否则, 系统将立即发起重试,最多重试3次,若仍失败,则回调任务积压,本批回调任务会和后续下一批一同发送

最多积压6小时,超时作废.

特例: 当本身就是最后一批任务的回调时,如果重试3次仍失败,则作废 (因为这个没有后续的一批了)

推送分批任务

POST /pcs/task/push

{
    "taskId": 123,
    "uploadDir": "home",
    "no": 1,
    "isEnd": true,
    "photos": [
        {
            "photoId": 1233,
            "photoName": "1.jpg",
            "photoUrl": "https://s.tupianzhibo.cn/image/jpeg/20210708/152935/FvwVLQYJcMDGgiEiTs8kmBpMMtjk5444.jpg!p1600"
        },
        {
            "photoId": 1234,
            "photoName": "2.jpg",
            "photoUrl": "https://s.tupianzhibo.cn/image/jpeg/20210708/152745/Fi--0gRDVdTmwKQLqjxzntqm7f06686.jpg!p1600"
        }
    ]
}

taskId必须在之前调用[创建任务]创建过

每次创建的任务6小时内有效,所以此分批任务也必须6小时内发送完毕.

鉴权

header token 鉴权

回调时,也同样回传此token,业务系统需校验此回调token

回调

创建任务时指定回调地址

回调以POST application/json 回调创建任务时配置的地址.

数据结构

任务ID -> 任务配置

系统根据配置的TASK_INDEX_KEY作为一个持久键,用作任务发现.

所有创建的任务均存储在此键下.

依据此键(例如键为taskdev)

派生出队列2个(例如taskId为123)

主队列 taskdev::list::123 备份队列 taskdev::list::123.bak

回调任务的hash一个 taskdev:callback:123

分批任务均存储在主队列,系统消费时,使用RPopLPush原子操作

取出主队列最右侧一个,加入备份队列左侧,并返回这个数据.

系统执行这个上传任务,执行完毕后,注册一个回调任务.然后清空备份队列.

待执行到一定阶段时,统一触发回调任务,然后回调成功后,清空这个hash.

若在执行中途崩溃,可能会出现 备份队列 存在数据,则下次启动时,检查备份队列,重新加入主队列右侧.然后清空备份队列.

因主队列最后一个是结束标记,所以此处填充主队列是右填充.

重启时,系统也会检查是否有未执行成功的回调任务,如果有,也会再次执行. (避免重启后没有任务了,而无法触发积压到一定阶段回调)

环境变量

redis服务器地址和密码

REDIS_SERVER

REDIS_PASSWORD

TOKEN 接口鉴权token

TASK_INDEX_KEY 任务中心key,此键的Hash,存储所有任务索引,用作任务发现

INTERNAL 内网解析地址,用于七牛内网下载

APP_DIR 应用的文件夹名称,没有/. 例如 映目云摄影

华北HTTP内网下载IP地址 free-qvm-hbzz-gate-io.qiniu.com

使用的redis db 为 1

编译部署

本次测试,可以直接 make dev

编译docker镜像并推送 make docker

正式环境部署在七牛114服务器.


docker run -d -m 600m \
--name pcsuploader_dev \
--log-opt max-size=5m \
--restart always \
-e REDIS_SERVER="127.0.0.1:6379" \
-e REDIS_PASSWORD="will2020" \
-e TOKEN="1234" \
-e APP_DIR="映目云摄影" \
-e INTERNAL="free-qvm-hbzz-gate-io.qiniu.com" \
-e TASK_INDEX_KEY="taskdev" \
--network host \
registry.cn-beijing.aliyuncs.com/willdocker/pcsuploader:latest pcsuploader -p 1717

其中TASK_INDEX_KEY区分正式和beta,dev

可以配置成 taskv1 taskbeta taskdev 等 , 端口号分别使用 1719 1718 1717

其他

照片限制最大20MB

因上传需计算每个分片的md5,所以文件全部载入内存,不适合大文件上传.

未能解决你的问题?请联系在线客服
即刻获取您的专属客服
预约映目云摄影,获取更多资讯
请输入正确姓名!
请输入正确手机号!
即刻获取您的专属客服
预约映目云摄影,获取更多资讯
请输入您的姓名
请输入您的联系方式
提交预约
预约成功
2小时内,给您回拨电话
400-6161-905
每日08:00-22:00快速响应
立即预约
请输入正确的手机号
立即预约
免费体验
预约映目云摄影
* 手机号
请输入您的手机号
立即预约