【问题标题】:How to get NSData from file by using PHAsset如何使用 PHAsset 从文件中获取 NSData
【发布时间】:2016-06-09 16:34:47
【问题描述】:

我在路径中有文件

file:///var/mobile/Media/DCIM/100APPLE/IMG_0197.mov

但是当我尝试这段代码时-

NSError *error;
NSData *data = [NSData dataWithContentsOfFile:assetUrl.relativePath options:NSDataReadingMappedAlways error:&error];

我得到的只有错误:

错误域=NSCocoaErrorDomain Code=257 "Не удалось завершить операцию。 (可可, ошибка 257)" UserInfo=0x175a61380 {NSFilePath=/var/mobile/Media/DCIM/100APPLE/IMG_0197.mov, NSUnderlyingError = 0x17424e550 "你可以使用 завершить операцию。 不允许操作”}

文件存在,但我无法读取。

但同时AVPlayer正常播放视频文件。

我试过了

PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[assetUrl] options:nil];

但我没有得到任何结果。

【问题讨论】:

    标签: ios file nsurl phasset


    【解决方案1】:

    您无法直接访问NSURL,因为这些文件位于您应用的沙箱之外。一些框架(如AVPlayer)具有例外权利并且可以访问URL。 要访问PHAsset 对象的数据,请查看PHImageManager 的以下方法:

    图片:requestImageDataForAsset

    视频:requestExportSessionForVideo

    【讨论】:

      【解决方案2】:

      对我来说帮助了以下代码。请务必使用relativePath 而不是absoluteString

          [[PHImageManager defaultManager] requestAVAssetForVideo:videoContent options:options resultHandler:^(AVAsset* avasset, AVAudioMix* audioMix, NSDictionary* info){
                      AVURLAsset* myAsset = (AVURLAsset*)avasset;
                      NSData * data = [NSData dataWithContentsOfFile:myAsset.URL.relativePath];       
                      if (data) {
                      }
          }];
      

      Swift 3 版本:-

      PHImageManager.default().requestAVAsset(forVideo: asset, options: nil, resultHandler: { (asset, mix, nil) in
                          let myAsset = asset as? AVURLAsset
                          do {
                              let videoData = try Data(contentsOf: (myAsset?.url)!)
                              self.selectedVideoData = videoData  //Set video data to nil in case of video
                              print("video data : \(videoData)")
      
                          } catch  {
                              print("exception catch at block - while uploading video")
                          }
                      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多