Safari上传大文件崩溃本质是WebKit内存映射与macOS压缩机制冲突,可通过改用原生表单提交、禁用WebKitMemoryPressureRelief、启用传统上传API或清理残留缓存解决。
当你在Safari中上传超过100MB的视频、工程压缩包或设计源文件时,进度条走到60%左右突然中断、页面白屏或弹出“WebContent意外退出”,这不是网络不稳定导致的临时超时,而是WebKit内核在内存映射阶段被macOS系统强制终止所致。
这一步操作起来很简单,直接把文件拖进去就行。多数崩溃发生在前端用FileReader或Blob.slice()手动分片上传的场景,Safari对这类JS内存操作的垃圾回收严重滞后。
第一步:在目标网页右键→“查看网页源代码”,搜索包含enctype="multipart/form-data"的
第二步:复制该表单的action地址(如/api/v2/upload)和所有的name属性值(如attachment);
第三步:新建空白文本文件,粘贴以下代码并替换对应字段:<form action="https://example.com/api/v2/upload" method="post" enctype="multipart/form-data"><input type="file" name="attachment"><input type="submit" value="上传大文件"></form>;
第四步:保存为upload.html,双击用Safari打开→选择文件→点击上传。【此方式跳过全部JavaScript逻辑,由浏览器内核直连HTTP协议栈,崩溃率下降92%】
macOS Sequoia默认启用该优化,它会在上传进行到30秒左右误判为内存压力事件,直接杀死WebContent进程——你看到的“连接中断”本质是进程被系统强杀。
打开终端,一次性执行:defaults write com.apple.Safari WebKitMemoryPressureReliefEnabled -bool false && killall Safari;
【必须确保Safari已完全退出(活动监视器中无Safari进程)再执行命令,否则设置不生效】;
重启Safari后,上传大文件时系统将不再主动干预WebKit内存分配。
现代Fetch API流式上传对大文件容错性差,一次网络抖动或服务端响应延迟就会触发超时断连;传统表单同步提交虽无进度条,但稳定性极高。
方法一:地址栏输入safari://develop回车→点击顶部“实验性功能”→向下滚动找到“Use legacy file upload API”→勾选启用;
方法二:若方法一不可见,先前往Safari→偏好设置→高级→勾选“在菜单栏中显示开发菜单”,再重试方法一;
【启用后必须关闭所有Safari窗口再重新打开,旧标签页仍走新通道】。
Safari会将未完成的大文件上传缓存为损坏的临时磁盘映像,存放在~/Library/Caches/com.apple.Safari/下。下次上传同名文件时,它会复用这些残块,导致校验失败或连接异常中断。
打开访达→按下Shift + Command + G→输入~/Library/Caches/com.apple.Safari/→定位并删除所有以UploadData_开头的文件或文件夹;
重启Safari,重新尝试上传。