签名文件相关
签名文件
PRS 提供了 API 让用户能够将兼容 PRS 协议的数据存放在 PRS 链上,目前支持多种类型的数据上链,包括 文件签名、合约创建等,更多内容请参考 PRS 协议。
本节将介绍如何上传文件并对文件签名,同时保存至 PRS 链上。
- 使用
keccak256
算法对文件进行 hash 计算,获取 filehash。
单向散列函数 keccak256 请参考数字签名
- 根据 PRS 协议对文件签名数据的规定,进行 data 数据组合。
data: {
file_hash: '9f5adad09ffaba620640151e7a76ff67846d65c48f57c8f3bfa79165986c5185'
}
- 对 data 进行数字签名,获取
hash
、signature
。
curl -X POST https://beta.press.one/api/v2/sign \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo" \
-d '{ "payload": { "data": { "file_hash": "9f5adad09ffaba620640151e7a76ff67846d65c48f57c8f3bfa79165986c5185" } } }'
- 上传发布文件。
POST /api/v2/files
curl -X POST https://beta.press.one/api/v2/files \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo" \
-H 'Content-Type: multipart/form-data; charset=utf-8; boundary=__X_PAW_BOUNDARY__' \
-F "address=${address}" \
-F "signature=${signature}" \
-F "title=${title}" \
-F "source=${source}" \
-F "originUrl=${originUrl}" \
-F "category=${category}" \
-F "file=${file}"
FormData
参数 | 类型 | 备注 |
---|---|---|
file | File | 需要上传的文件,目前支持 markdown 以及图片文件 |
address | string | 授权用户的 address,授权成功后和 token 一起返回的 authAddress |
signature | string | 步骤 3 中对 data 进行数字签名得到的 signature |
title | string | 文件的标题 |
source | string | 文件的来源,选填 |
originUrl | string | 文件的源 Url,选填 |
category | string | 文件分类,选填 |
DApp 通过 Web 端授权成功之后,PRS 服务会为用户创建 Sub Key(由 PRS 保存),同时会返回对应的 access token。此时由于 Sub Key 保存在服务端,所以数字签名需要在服务端进行,PRS 提供了相应的 API 供用户签名。
根据 rId 获取文件
GET /api/v2/files/${rId}
rId
: 创建文件之后返回的 id。
curl -X GET https://beta.press.one/api/v2/files/8b6885661754208a27d1aa3e23798e5e672c9fd856be2d8bf62d3b41c6f85424 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo"
根据 msghash 获取文件
GET /api/v2/files/hash/${msghash}
msghash
: 文件内容的 hash 值。
curl -X GET https://beta.press.one/api/v2/files/hash/c6fc6b9c137342943300084208314dbb1a77128fde1906599a91ae735fffb436 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo"
Markdown 嵌入图片签名文件
在文章中,现在会有两种类型的图片:
- 外链图片
- 签名图片
外链图片
无需特别处理,直接显示。格式为:
签名图片
格式为:
。
其中,prs://file?rId=xxx
是我们图片的协议。rId 表示这个图片在链上对应的 id。这个协议是通用的,可以用来表示任何格式的数字内容,将来还可以表示音频、视频等等。
前端在展示图文混排文档时,需要从文档中获取所有的协议,并且提取出 rId,然后根据 rId 获取图片的原链接,最终把协议替换成原链接。
缩略图服务
PRS 为签名过的图片提供缩略图服务。
Endpoint
https://dev.press.one/thumbnail?width=${width}&url=${url}
参数说明
width / height
:图片要缩放到的宽度 / 高度,任选其一,1-1500 的整数,请注意 2x 及 3x 屏幕显示下应乘以相应倍数;url
:图片链接,当前只会信任 static.press.one 与 storage.googleapis.com/pressone 域;quality
:JPEG 格式图片质量,1-100 的整数,越大则图片质量越高,默认为 80;compression
:PNG 压缩级别,1-10 的整数,越大则压缩率越高,默认为 6;force
:当指定尺寸超过原始尺寸时,添加该参数会返回指定尺寸图片,否则会返回原始尺寸图片;
Example
https://dev.press.one/thumbnail?url=https://static.press.one/9e/ef/9eef3cd927eaaab871963d4658a49d89.png&width=100