文件 上传
上传
可以通过按钮、拖放文件,或上传电脑上的整个文件夹。浏览器把文件内容直接发送到存储桶;服务器只负责签名目标地址、检查到达的内容并将其列出。
提示:把整个文件夹拖到网盘上试试
本页内容
分片直传到存储桶
大于 8 MiB 的文件会分片上传,每个分片发送到按其确切长度签名的地址,同时上传若干个。
POST /uploads告诉页面每个分片发往哪里;分片发送到存储桶;POST /uploads/finish将它们合并,服务器在列出文件之前会检查到达的大小。- 失败的分片会从已到达的位置重试,最多五次,每次等待时间更长。文件最大 5 GiB,除非
maxSize另有设定。 - 存储桶必须在跨域规则中暴露 ETag:页面从每个分片读取它,服务器需要它来合并分片。
上传面板
同时上传三个文件;每个都显示已上传多少、速度和剩余时间,全部文件的汇总也一样。
可以停止某个文件,已到达的部分会被清除;失败的文件会从已到达的位置重试。速度取最近几秒的平均值,因此剩余时间能跟上变化,又不会随每次波动跳动。
const { uploads, summary } = useUploads({ check: true });
// summary.remaining: seconds until all are up, at the speed all go at together
// uploads[i].remaining: the same, of one断点续传
被中断的上传,或关闭页面时未完成的上传,在把同一文件再次上传到同一位置时,会从中断处继续。
// A file cut halfway, or left when the page closed, is uploaded again:
await client.upload(file, { parent }); // asks the server what arrived, sends the rest页面会在 localStorage 中记住它一天,只要服务器还保留着这些分片。从未继续的上传会留在存储桶中,等待生命周期规则清理(“1 天后中止未完成的分片上传”)。
整个文件夹
拖放到网盘上,或通过“上传文件夹”选择,文件夹会连同其中所有内容一起上传:子文件夹自上而下创建,空文件夹也会创建,名称冲突时加上 “(2)”。
重复文件的询问
每个文件上传前,都会先在网盘中查找。
| 发现 | 询问 |
|---|---|
| 在自己可读的任何位置有相同内容 | 仍然上传,或跳过。 |
| 目标位置已有同名文件 | 替换(作为它的新版本)、两者都保留(“(2)”),或跳过。 |
内容通过页面中计算的 SHA-256 判断(适用于 64 MiB 以内的文件),并随版本保存(由 POST /duplicates 查找)。“对其余文件执行相同操作”会一次性回答同类的所有文件。checkUploads={false} 则直接上传,不再询问。
随文件一起发送的内容
在页面中生成,并在文件之后发送;无论它们是否送达,文件本身都已上传完成。