swift - NSCocoaErrorDomain Code=257 文件无法打开,因为您无权查看它:FileManager attributesOfItem 在 iOS13 中返回 nil
问题描述
在 iOS 13 设备中,FileManager 在尝试获取文件大小时返回权限错误。
do {
let attr = try FileManager.default.attributesOfItem(atPath: my_file_path) //--> Getting nil
fileSize = attr[FileAttributeKey.size] as! UInt64
} catch {
print("Error: \(error)")
}
返回错误:
错误 Domain=NSCocoaErrorDomain Code=257 “文件“trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV”无法打开,因为您没有查看权限。” UserInfo={NSFilePath=/private/var/mobile/Containers/Data/PluginKitPlugin/ADB8684E-12B5-451D-A20F-158B899BB3DD/tmp/trim.1A9FFC19-EE2C-438A-BF3D-97E05A97EF9E.MOV,NSUnderlyingError=0x280af0510 {错误域=NSPOSIXErrorDomain Code=1 "不允许操作"}}
仅在我更新到 iOS 13 后才观察到该问题。在早期版本中,一切正常。
解决方案
iOS 13 SDK 将照片应用程序视为另一个应用程序,因此当我们关闭图像选择器控制器时,视频 url 将无效。
我在尝试将视频上传到 AWS 之前遇到了问题,我所做的只是创建一个临时文件夹并在关闭 Image-picker 之前复制现有的视频 url 路径。然后它上传,它的工作。
func createDirectory(videoURL:URL){
let Directorypath = getDirectoryPath()
var objcBool:ObjCBool = true
let isExist = FileManager.default.fileExists(atPath:Directorypath,isDirectory: &objcBool)
// If the folder with the given path doesn't exist already, create it
if isExist == false{
do{
try FileManager.default.createDirectory(atPath: Directorypath, withIntermediateDirectories: true, attributes: nil)
}catch{
print("Something went wrong while creating a new folder")
}
}
let fileManager = FileManager()
do {
if fileManager.fileExists(atPath:Directorypath) {
try? fileManager.removeItem(at: URL(fileURLWithPath:Directorypath))
}
try fileManager.copyItem(at:videoURL.absoluteURL, to: URL(fileURLWithPath:Directorypath))
self.imagePicker.dismiss(animated: true, completion:nil)
}catch let error {
print(error.localizedDescription)
}
}
推荐阅读
- bash - 如何使用一个命令的输出作为另一个命令的 bash 完成
- laravel - Laravel keyby 按日期
- html - Background image won't show via URL (HTML & CSS)
- php - 我在使用队列和调度程序在 laravel 中发送邮件时遇到问题
- python - 自动化测试(selenium python)
- http - 使用http时使用delete函数删除地图条目
- machine-learning - Using Deep Neural Networks to perform LASSO regularization on inputs?
- php - 如何在 Laravel 8 中断言没有键的错误
- rust - Rust geojson:预期枚举找到参考
- flutter - 如何在 ChangeNotifer 中使用 Flutter 钩子