保存到 PixelDrop 测试版
让使用你的网站或应用的人把文件直接保存到他们自己的 PixelDrop。一个 script 标签,一次调用。
测试版:该工具刚推出,选项可能会变化,你的反馈将帮助我们完善它。有问题或想法?请联系 [email protected]。
添加
<script src="https://pixeldrop.ca/sdk.js"></script>
<button id="save">Save to PixelDrop</button>
<script>
document.getElementById("save").onclick = function () {
PixelDrop.save(myFileOrBlob, { name: "report.pdf" })
.then(function (saved) { console.log("saved", saved.id, saved.folder); })
.catch(function (err) { console.log("not saved:", err.code); });
};
</script>
选项:name(文件名)和 folder(默认文件放进以你的网站命名的文件夹;给一个简短文本可自行命名文件夹,或用 false 把文件直接放在用户的文件中)。
请在点击事件中调用 PixelDrop.save():浏览器只会因点击而打开 PixelDrop 窗口。文件可以是 File、Blob,或返回其中之一的函数(或其 Promise)。
试一试
选择任意文件,然后点击按钮。你需要一个已开通 Membre 的 PixelDrop 账户,并已连接 Pixeldrain 账户。
让他们从自己的 PixelDrop 中选择文件
PixelDrop.pick({ hours: 168 })
.then(function (file) { console.log(file.name, file.url); })
.catch(function (err) { console.log("not chosen:", err.code); });
窗口会向用户展示他们自己的文件;用户选择一个(或用 multiple: true 选择多个)。你的应用会收到 { id, name, size, url, expires_at }:一个指向文件的链接,有效期为 hours 小时(1 到 720,默认 168)。除了该链接,它不会得到文件内容,也得不到账户的其他任何信息。错误:popup_blocked、cancelled、not_member、no_files、failed。
用户看到什么
会打开一个小的 pixeldrop.ca 窗口。用户在需要时登录,并看到:“你的网站.com 想把文件保存到你的 PixelDrop”,以及文件名和大小。用户点击保存。文件会存入用户的 PixelDrop,放在以你的网站命名的文件夹中(你可以自己命名文件夹,或直接存放)。不会与任何人共享。
网站名称来自浏览器而不是你的代码,因此没有页面可以冒充其他页面。用户可以在设置 → 已连接的应用中查看并移除用过的网站。
你的页面得到什么
PixelDrop.save() 返回一个 Promise,结果为 { id, name, size, folder }。你的页面不会得到密钥、令牌或账户访问权限:只有结果。
错误 code | 含义 |
|---|---|
popup_blocked | 浏览器拦截了窗口。请直接在点击事件中调用 save()。 |
cancelled | 用户关闭了窗口或点击了取消。 |
not_member | 从其他网站保存需要 PixelDrop Membre(免费试用也算)。 |
too_large | 没有 PixelDrop 浏览器扩展时,无法保存超过 25 MB 的文件;有扩展则不限大小。 |
failed | 其他情况;err.message 会说明原因。 |
- 在任何
https网站上都能使用(开发时也可用于localhost)。 - 使用 PixelDrop 浏览器扩展时,文件直接从浏览器传到用户的 Pixeldrain,没有大小限制。没有扩展时,最大 25 MB 的文件经由 PixelDrop 的服务器。
- 用户无需额外付费,你也无需付费:PixelDrop 自己不存储任何内容,文件保存在用户自己的 Pixeldrain 账户中。
- 在确认窗口中,用户可以勾选“始终允许此网站保存到这里”:之后来自你网站的保存会在 3 秒倒计时后自动开始(带有取消按钮),直到用户在设置中移除你的网站。
注册你的应用并获得“已验证”徽章
未注册的网站在窗口中显示为“此网站尚未在 PixelDrop 注册”。注册后,人们会看到它的名称,经我们审核后还会看到绿色的 ✓ 已验证的应用 徽章。
- 登录后打开设置 → 开发者。输入应用名称和网站地址(
https://你的网站.com)。 - PixelDrop 会给你一行文本。请在
https://你的网站.com/.well-known/pixeldrop-verify.txt发布一个纯文本文件,内容恰好为这一行。 - 点击立即检查。PixelDrop 通过 https 读取该文件一次,不跟随重定向。匹配后,你的网站即被证明,并显示其名称。
- 随后我们会审核并批准该应用:徽章就会出现。你可以随时移除你的应用。
让人们向你的应用发送文件
网站被证明后,你可以在其上添加一个接收地址(设置 → 开发者)。已经从你的网站保存过文件的用户,会在每个文件的发送到…中看到你的应用。他们选择后,PixelDrop 会向你的地址发送一条简短的 JSON 消息:
{ "event": "file.shared", "id": "…", "time": "2026-10-16T20:00:00Z",
"file": { "name": "report.pdf", "size": 1234, "sha256": "…", "url": "https://pixeldrop.ca/s/…" },
"expires_at": "…", "max_downloads": 3 }
链接有效期为 24 小时,可下载 3 次。消息中不包含用户的任何信息:没有姓名、邮箱或账户。消息带有签名,让你确认它来自 PixelDrop。请求头为 X-PixelDrop-Signature: t=<Unix 秒数>,v1=<十六进制>,其中 v1 是用你的密钥对 <t>.<原始请求体> 计算的 HMAC-SHA256(密钥显示在设置中)。请校验它,并拒绝几分钟之前的 t。返回任何 2xx 状态表示接受;其他状态会告诉用户该应用未接受文件。
const sig = req.headers["x-pixeldrop-signature"]; // t=...,v1=...
const [t, v1] = sig.split(",").map(x => x.split("=")[1]);
const ok = crypto.createHmac("sha256", SECRET).update(t + "." + rawBody).digest("hex") === v1
&& Math.abs(Date.now()/1000 - Number(t)) < 300;
地址必须在你自己的网站上(相同主机,https,无端口)。PixelDrop 从其服务器调用该地址,且绝不会访问私有或内部地址。