我正在尝试从iPhone设备上传视频:
var uploadTask = self.session?.uploadTaskWithRequest(request, fromFile:NSURL(string: assetFilePath.path)!)
此代码适用于模拟器,并提供一个可以恢复的会话任务对象。但它在iPhone设备上不起作用。
它失败了:
2015-05-19 18:36:44.718 myApp[327:24703] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot read file at file:///var/mobile/Media/DCIM/100APPLE/IMG_0144.mp4'
我试图检查视频文件是否具有读取权限,但在iPhone上返回false:
fileManager.fileExistsAtPath(asset.path) // returns false
之前有人遇到过这种情况,或者我在这里做错了什么?
我用来获取文件路径的代码是:
let options = PHFetchOptions()
options.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: true)
]
currentVideofetch = PHAsset.fetchAssetsWithMediaType(.Video, options: options)
let asset = self.currentVideofetch.objectAtIndex(indexPath.row) as? PHAsset
var assetLength:NSNumber!
var assetFilePath:NSString!
if let checkdAsset = asset {
PHImageManager.defaultManager().requestImageDataForAsset(checkdAsset,options: nil) {
imageData,dataUTI,orientation,info in
assetLength = imageData.length as NSNumber
let assetFilePathUrl = info["PHImageFileURLKey"] as? NSURL
assetFilePath = assetFilePathUrl!.absoluteString!
println("Assets FilePath \(assetFilePath)") // returns file:///var/mobile/Media/DCIM/100APPLE/IMG_0144.mp4
}
}
答案 0 :(得分:1)
搞砸了很多。这是iOS中的经典权限问题。不幸的是,我没有得到任何直接的答案。我们不得不将文件复制到我的应用程序的本地目录中。之后,一切都像魅力一样。 但是在大文件的情况下,我在后台任务中发送复制文件逻辑。