内部存储使用正常,外部存储下载文件报错PLATFORM ERROR/Incorrect destination
这种情况我之前碰到过几次,核心问题大概率出在下载操作对路径的要求和普通文件系统操作不一致上,给你几个针对性的排查和解决方向:
优先使用File System Handle而非字符串路径
你用{storage.label}/dir能创建目录和文件,但下载工具可能无法正确解析label对应的真实路径(比如部分系统里外部存储的真实路径是UUID格式,如/storage/XXXX-XXXX,而label只是显示名称)。建议先通过File System API获取外部存储的目录handle:// 获取外部存储目录handle const rootHandle = await navigator.storage.getDirectory(); const externalDirHandle = await rootHandle.getDirectoryHandle('你的外部存储目录名', { create: true }); // 创建目标文件handle const fileHandle = await externalDirHandle.getFileHandle('要下载的文件名', { create: true });然后将下载内容直接写入这个fileHandle,而不是用字符串路径指定下载目标。
确保下载路径包含完整文件名
很多下载API(比如浏览器的download属性或者第三方下载工具)要求目标路径必须是完整的文件路径,而不是仅目录路径。如果你只指定了{storage.label}/dir而没有加上具体的文件名,就会触发"Incorrect destination"错误。记得在路径末尾补充文件名,比如{storage.label}/dir/下载文件.pdf。验证外部存储的持久化权限
虽然你能创建目录和文件,但下载操作可能需要更高的权限验证。建议主动请求对目标目录的持久化权限:const dirHandle = await window.showDirectoryPicker(); // 请求持久化读写权限 await dirHandle.requestPermission({ mode: 'readwrite' }); // 持久化存储handle以便后续会话使用 await navigator.storage.persist();持久化权限能避免会话过期后权限丢失导致的下载失败。
避开含特殊字符的路径部分
如果{storage.label}包含空格、中文或其他特殊字符,可能会导致路径解析异常。建议直接使用外部存储的真实挂载路径(可以通过File System Handle的name属性或者系统文件管理器查看),替换掉label部分。
内容的提问来源于stack exchange,提问作者MichaelS

