我试图通过谷歌可恢复上传功能从iOS设备上传文件。我尝试的是PhotoKit和uploadTask(with:fromFile)
的方法。
extension ExampleViewController: PHPickerViewControllerDelegate {
public func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
....
let identifiers = results.compactMap { $0.assetIdentifier }
identifiers.forEach { identifier in
getFileUrlFromPHAsset(assetIdentifier: identifier) { fileUrl in
// googleSessionUri is a url to upload a file to
var request = URLRequest(url: URL(string: googleSessionUriToUpload)!)
request.method = .put
let task = urlSession.uploadTask(with: request, fromFile: fileUrl)
task.resume()
}
}
}
}
func getFileUrlFromPHAsset(assetIdentifier: String, completion: ((URL) -> Void)) {
guard let asset = PHAsset.fetchAssets(withLocalIdentifiers: [assetIdentifier], options: nil).firstObject else {
return
}
let option = PHVideoRequestOptions()
option.isNetworkAccessAllowed = true // for icloud files? not sure
PHImageManager.default().requestAVAsset(forVideo: asset, options: option, resultHandler: { avAsset, _, _ in
if let urlAsset = avAsset as? AVURLAsset {
completion(urlAsset.url)
} else {
// TODO: error handling..
}
})
}
但我得到了一个错误BackgroundSession <D4B1D24E-B567-4935-8589-40FF99845CD6> Failed to issue sandbox extension for file file:///var/mobile/Media/DCIM/100APPLE/IMG_0030.MOV, errno = [1: Operation not permitted]
。
我应该把这个PHAsset复制到一个临时文件来上传吗?那么,我如何管理临时文件可能消耗磁盘空间的风险?对于我的情况下,视频文件是相当大的,大致千兆字节的大小。在设备没有足够空间的极端情况下,上传可能无法启动。
先谢谢你了。
1条答案
按热度按时间wgeznvg71#
如果您担心空间不足,请尝试将视频转换为数据,然后使用multipart技术上传。