文件、下载和传输
iPhone 上文件的大部分随意性都遵循一项有关隔离的规则,而使下载可靠的大部分内容都遵循 HTTP 的一项功能。这些就是这些词,加上文件从一台设备传输到另一台设备的方式。
-
沙盒
-
每个应用程序只能看到自己的存储空间的规则。这就是为什么一个应用程序无法打开另一个应用程序的下载,以及为什么“文件位于视频旁边”在 iOS 上不存在的原因。
每个应用程序都有一个私有目录,其他人无法查看。文件只能通过有意的行为在应用程序之间移动——共享表、文档选择器、拖动——每一个都是人做出的决定,而不是应用程序帮助自己做出的决定。
成本落在小地方。桌面播放器会自动在“film.mkv”旁边找到“film.srt”;在 iOS 上,没有“旁边”,因此必须有意交出字幕文件,并且应用程序必须能够记住配对。
-
应用组
-
来自同一开发人员的两个应用程序的共享容器可能会同时打开——这是沙箱中唯一受到认可的漏洞。这是共享扩展将文件传递给其所属应用程序的方式。
共享扩展是一个独立于它似乎所属的应用程序的程序,具有自己的沙箱和非常短的生命周期。它无法写入主应用程序的存储。
因此,它会写入一个允许两者查看的容器,并且应用程序会在下次打开该容器时耗尽该容器。没有任何东西可以跨越开发人员的边界,也没有任何东西可以在没有明确的点击的情况下跨越。
另请参阅: 沙盒
-
安全范围书签
-
一个令牌,可以记住沙箱外部文件夹(外部驱动器、iCloud 中的文件夹)的权限,以便应用程序可以稍后重新打开它,而无需再次询问。
当您通过系统文件选择器选择位置时,授予的权限是针对该时刻的。书签会在启动时保留它,并且应用程序必须显式启动和停止使用它所代表的访问权限。
它使得浏览外部 SSD 成为可能,而无需复制任何内容,并且它的范围完全取决于您选择的内容 - 一个文件夹的书签不会授予任何有关其邻居的信息。
另请参阅: 沙盒
-
范围请求
-
向服务器请求文件的特定片段(字节 5,000,000 到 5,999,999),而不是整个文件。它使下载可恢复,并允许多个连接同时获取一个文件。
支持范围的服务器会回答 206 部分内容和所要求的切片。一个不回答 200 并从头开始发送所有内容的网络,这就是恢复下载和重新启动下载之间的区别。
下载引擎的所有有趣之处都取决于这一 HTTP 功能。如果没有它,连接断开后将无法恢复,重新启动后也将无法恢复,并且无法使用多个连接。
-
可断点下载
-
通过记录已提交的字节数并询问其余字节,从确切的停止位置继续传输,而不是重新开始。
要求是记录的数字绝不乐观。当应用程序被终止时,一个被视为已写入但仍位于缓冲区中的字节会成为文件中的一个洞,而视频中间的一个洞是一种损坏,只有在观看一个小时后才会出现。
这就是为什么计数必须遵循磁盘写入而不是从网络读取的原因,也是为什么前台和后台传输之间的每次切换都必须就一个数字达成一致的原因。
-
并行连接
multi-connection, chunked download -
将一个文件拆分为多个范围并一次获取多个文件。当单个连接受到限制时它会有所帮助,而当瓶颈是您自己的线路时它什么也不做。
通常可以说服限制每个连接速度的服务器在多个连接上提供更多的总速度。这就是多连接下载赢得声誉的地方。
它不是魔法,而且经常被误解。如果您的连接已经饱和,更多的连接会将相同的容量分成更小的部分并增加开销。有些服务器还拒绝或限制来自一个地址的多个请求。
-
后台传输
-
下载会交给操作系统,以便在应用程序关闭后继续进行。系统决定时间,这就是它继续进行的交易。
iOS 应用程序在您离开后不久就会停止运行。给予系统后台服务的传输在该情况下仍然存在,并且在应用程序被终止后仍然存在,并在重新启动后恢复。
它放弃的是控制。系统根据自己的电源和网络状况视图对这些传输进行批处理,因此后台下载可能会以应用内下载不会的方式暂停和恢复 - 并且它会完成。
-
WebDAV
-
HTTP 的扩展,可将 Web 服务器转变为文件服务器:列出、读取、写入、移动、删除。这就是 Nextcloud 和 ownCloud 所说的,也是大多数 NAS 盒子所提供的。
因为它的底层是 HTTP,所以 WebDAV 通过与网络上其他任何东西相同的基础设施工作——没有特殊的端口,没有特殊的客户端协议——这就是为什么它能够幸存下来,而更复杂的文件协议却没有。
对于那些不想将文件放在公司云中的人来说,这是一个实用的选择:您自己的服务器、您自己的凭据、普通标准。
另请参阅: 云存储
-
云存储
-
文件保存在别人的服务器上,通过该公司的 API(Dropbox、OneDrive、Box、pCloud)访问。每一种都有自己的界面,这就是应用程序一次支持它们的原因。
不存在通用的云协议。每个提供商都设计了自己的 API 和自己的登录流程,因此将提供商添加到应用程序是真正的工作,而不是配置条目。
登录通常是 OAuth,这意味着应用程序永远不会看到密码:提供商对人员进行身份验证并交回一个令牌,该令牌可以随时从提供商自己的设置中撤销。
另请参阅: WebDAV
-
WebRTC
-
直接连接两个设备的标准,一旦连接存在,它们之间就不需要服务器。这是设备到设备传输用来在房间内移动文件的方法。
小型信令服务器将两个设备相互介绍(这就是六位代码的用途),然后退出。文件直接在设备之间传输,不会存储在设备之间的任何位置。
在同一网络上,速度与网络允许的速度一样快。在互联网上,这取决于双方是否可以直接到达,这就是连接偶尔会因为设备看不到的原因而失败的地方。
另请参阅: 本地 HTTP 服务器
-
本地 HTTP 服务器
-
在您自己的网络上应答网络请求的应用程序,以便您计算机上的网络浏览器可以打开您手机提供的页面。这就是 Wi-Fi Transfer 的工作原理,无需电缆,也无需账户。
电话显示地址;电脑打开它;它获得的页面由电话本身提供。文件直接通过本地网络移动,永远不会离开它。
由于同一网络上的任何人都可以访问该地址,因此它需要一个锁——输入代码、每个操作授予的权限,以及关闭破坏性的权限,除非故意打开。
另请参阅: WebRTC