photo
将图片保存到 Android 系统图库。
photo.save
photo.save(options): Promise<void> 将一张图片保存到 Pictures/SuperNode。写入并发布完成后 resolve。支持普通项目和小组件任务,执行受宿主进程和任务生命周期约束。Android 10+ 添加应用自己的媒体使用 MediaStore,直接保存,无需图库读取权限。
| 参数 | 类型 | 说明 |
|---|---|---|
url | string | URL | HTTP(S) 图片地址。 |
headers | Readonly<Record<string, string>> | URL 请求的可选请求头。 |
data | Blob | ArrayBuffer | ArrayBufferView | 图片字节,包含 File 和 Node.js Buffer。 |
filename | string | 可选文件名,规范化为单个文件名。 |
url、data 必须二选一;headers 用于 URL 请求。SDK 导出 PhotoSaveOptions 联合类型。空数据、非法 URL、请求头、文件名和无效图片会报错。
保存 URL
import { photo } from "supernode";
await photo.save({
url: "https://example.com/photo.png",
filename: "photo.png",
});请求头与下载
通过 headers 传入认证信息。下载使用流式 GET,最多跟随 10 次重定向;跨源重定向移除 Authorization、Cookie、Proxy-Authorization。请求使用显式请求头,独立于 Android 应用的 Cookie 和缓存。每次网络读取的空闲超时为 30 秒。
import { photo } from "supernode";
await photo.save({
url: "https://example.com/private/photo.jpg",
headers: { Authorization: "Bearer YOUR_TOKEN" },
});保存字节
import { readFile } from "node:fs/promises";
import { photo } from "supernode";
await photo.save({ data: await readFile("images/result.png"), filename: "result.png" });文件名依次取显式 filename、File.name、最终 URL 文件名、生成名称。Android 根据图片内容校验格式和 MIME,保存原始字节。
大图片与错误
数据通过独立 RPC 连接按最多 512 KiB 分块、逐块确认,Android 增量写入临时文件。URL 图片采用流式下载;内存字节源会创建 Blob 快照。总大小受可用存储和任务生命周期约束。失败、断连时清理传输文件和待发布记录;应用下次启动时回收遗留任务。
使用 try/catch 处理失败。错误前缀包括 PHOTO_PERMISSION_DENIED、PHOTO_DOWNLOAD_FAILED、PHOTO_TRANSFER_FAILED、PHOTO_INVALID_IMAGE 和 PHOTO_SAVE_FAILED。SDK 参数错误抛出 TypeError。
import { photo } from "supernode";
try {
await photo.save({ url: "https://example.com/photo.png" });
} catch (error) {
console.error(error);
}