无法上传照片库视频,但能够上传从相机iOS拍摄的视频

时间:2016-10-18 11:03:00

标签: ios sandbox

我正在开发一个应用程序,我需要将视频上传到服务器。现在我有两件事:

  1. 使用UIImagePickerController拍摄视频,生成缩略图,然后上传到服务器
  2. 从照片库中选择视频,生成缩略图,然后上传到服务器。
  3. 现在两者之间的唯一区别是:

    当我使用'generateImageAsynchronouslyForTimes:completionHandler:'方法时,我在其completionHandler块中得到一个调用,我得到一个AVAsset。现在我使用下面的代码来获取它的URL:

        NSURL *path_url = [(AVURLAsset*)asset URL];
    

    这就是我觉得事情搞得一团糟的地方,因为我在案例2中得到类似的东西(当我从画廊中选择视频时):

    文件:///var/mobile/Media/DCIM/102APPLE/IMG_2439.mp4

    所以我无法上传它,而案例1工作正常。这是与沙盒相关的东西吗?

    这两条路径有什么区别?

    1. 文件:///private/var/mobile/Containers/Data/Application/DA4632E3-FA25-4EBE-9102-62495BF105BF/tmp/trim.07786CFE-2477-4146-9EA0-0A04042A8D05.MOV“
    2. 文件:///var/mobile/Media/DCIM/102APPLE/IMG_2439.mp4
    3. 我想它的appSandbox路径在1)

1 个答案:

答案 0 :(得分:1)

在iOS中,每个应用都像一个岛屿,并且有一个沙盒环境。所以如果你想上传不在你的沙箱中的视频,你必须将该视频复制到你的沙箱然后你就可以了上传它。这是你如何做到这一点:

NSURL *path_url = [(AVURLAsset*)asset URL];

PHAssetResource *asset_resource = [[PHAssetResource assetResourcesForAsset:[fetchResult lastObject]]firstObject];

PHAssetResourceRequestOptions *options = [PHAssetResourceRequestOptions new];
options.networkAccessAllowed = YES;
NSURL *newURL = [self getSandboxURLFromURL:path_url];

[[PHAssetResourceManager defaultManager] writeDataForAssetResource:asset_resource toFile:newURL options:options completionHandler:^(NSError * _Nullable error) {

//here you will get the newURL that you will use...
}];

//获取沙盒网址的方法

-(NSURL*)getSandboxURLFromURL:(NSURL*)photos_gallery_url{

    NSString *last_path_component = [photos_gallery_url lastPathComponent];
    NSString *pathToWrite = [NSTemporaryDirectory() stringByAppendingString:last_path_component];
    NSURL *localpath = [NSURL fileURLWithPath:pathToWrite];
    return localpath;
}