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

Posted

技术标签:

【中文标题】无法上传照片库视频,但可以上传从相机 iOS 拍摄的视频【英文标题】:Not able to upload Photos gallery video but able upload videos shoot from camera iOS 【发布时间】:2017-02-27 14:58:01 【问题描述】:

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

    使用 UIImagePickerController 拍摄视频,生成缩略图然后上传到服务器 从相册中挑选视频,生成缩略图,然后上传到服务器。

现在两者的唯一区别是:

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

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

这是我认为事情变得一团糟的地方,因为在案例 2(当我从图库中选择视频时)我得到了类似的东西:

file:///var/mobile/Media/DCIM/102APPLE/IMG_2439.mp4

所以我不能在案例 1 正常工作时上传它。它与沙盒有关吗?

这两条路径有什么区别?

    file:///private/var/mobile/Containers/Data/Application/DA4632E3-FA25-4EBE-9102-62495BF105BF/tmp/trim.07786CFE-2477-4146-9EA0-0A04042A8D05.MOV" file:///var/mobile/Media/DCIM/102APPLE/IMG_2439.mp4

我猜它的 appSandbox 路径在 1) 中

【问题讨论】:

(1) 在沙箱中。 (2) 你是用 UIImagePickerController 来挑选原始视频还是编辑后的视频?如果您使用编辑过的视频,我认为可以上传。如果没有,请通过使用此视频 URL 创建 NSData 来检查您是否有权直接从库中读取文件。如果 NSData 为 nil,那么我应该选择编辑过的视频来上传。 如果我通过转换为 NSData 上传,那么它会出现内存问题,我正在使用 UIImagePickerController 从照片库中选择视频,然后将其发送到服务器。它给了我“DCIM”路径,你可以在我的帖子中看到。所以,它不会上传到服务器。它显示文件是空的,而如果我使用 UIImagePickerController cameraType 并拍摄视频然后上传,那么它就会被上传。 【参考方案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...
];

//获取沙盒URL的方法

-(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;

【讨论】:

以上是关于无法上传照片库视频,但可以上传从相机 iOS 拍摄的视频的主要内容,如果未能解决你的问题,请参考以下文章

android 网络浏览器是不是允许上传刚从相机拍摄的照片?

使用 Ionic 使用相机拍摄多张照片

解决ios手机上传竖拍照片旋转90度的问题

拍摄照片后,Ionic cordova 相机插件间歇性崩溃(使用 Firebase 图像上传)

从ios照片上传中读取exif日期

在相机拍摄期间分割视频以提高上传效率