如何上传 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(仅限视频和图像)?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHAsset 获取视频的缩略图?

我怎样才能给 PHAsset 一个标志?

如何在 iOS 中通过 UIActivityViewController 导出 PHAsset 视频

如何在 iOS 中播放视频 PHAsset?

如何使用 UIActivityViewController 共享 PHAsset?

用于反应本机应用程序的 PHAsset 图像 URI