如何上传 PHAsset(仅限视频和图像)?
Posted
技术标签:
【中文标题】如何上传 PHAsset(仅限视频和图像)?【英文标题】:How to upload PHAsset (video and image only)? 【发布时间】:2016-07-14 18:40:51 【问题描述】:我想上传 PHAsset,但我没有资产的文件路径。我可以使用以下块方法上传文件。但这些是获取 URL 的异步方法。是否有任何同步方法可以这样做或任何其他方式来上传 PHAsset 文件。
图片资源网址:
[asset requestContentEditingInputWithOptions:editOptions
completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info)
NSURL *imageURL = contentEditingInput.fullSizeImageURL;
];
视频文件网址:
[[PHImageManager defaultManager]requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info)
NSURL *url = (NSURL *)[[(AVURLAsset *)asset URL] fileReferenceURL];
];
【问题讨论】:
我们必须处理这些异步方法。还要考虑 URL 为 nil 的文件。此类文件不在本地设备上,而是在 iCloud 上。 【参考方案1】:我正在从 PHAsset 获取视频并将其存储到本地文件路径以将其上传到服务器:这是以下代码:
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key:"creationDate",ascending:false)]
assets = PHAsset.fetchAssets(with:fetchOptions)
let resourceManager = PHAssetResourceManager.default()
let resource = PHAssetResource.assetResources(for: asset).first!
let name = resource.originalFilename
let videoLocalPath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name)
//Storing the resource to local temporary path
resourceManager.writeData(for: resource, toFile: videoLocalPath, options: nil, completionHandler: error in
if error != nil
// on success do the upload using the local file path
)
希望对您有所帮助。
【讨论】:
我也是这么想的。原因是该应用程序在沙盒中运行,您无法直接从照片文件夹中进行更改或复制。我搜索了很多地方,但它就是这样。您必须创建一个本地副本并使用它。以上是关于如何上传 PHAsset(仅限视频和图像)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中通过 UIActivityViewController 导出 PHAsset 视频