user6898211
user6898211

Reputation: 53

How to save the videos in Partcular folder in iPhone Gallery in Objective-C

I have more than 10 videos url in one view which is coming from Web service. I am showing these videos thumbnails in UITableview. I am Using following code where I m Saving These Videos to gallery in particular folder

This is my code::

NSURL *url = [NSURL URLWithString:Urlstr];
NSData *data = [NSData dataWithContentsOfURL:url];

// Write it to cache directory
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"file.mov"];
[data writeToFile:path atomically:YES];
// After that use this path to save it to PhotoLibrary
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library addAssetsGroupAlbumWithName:@"MyFolderName" resultBlock:^(ALAssetsGroup *group)
 {
     //How to get the album URL?
     // saving the video in  gallery though file path and document directory
     [library writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:path] completionBlock:^(NSURL *assetURL, NSError *error) {

         if (error) {
             NSLog(@"%@", error.description);
         }else {
             NSLog(@"Done :)");
         }
     }];
 }
    failureBlock:^(NSError *error) {
                            //Handle the error
                        }];

Now the issues is it is not saving my video to My folder. But it creates the folder and saving the video in default video folder of gallery.

Anyone please suggest me why it going like this.

Upvotes: 0

Views: 529

Answers (1)

Anit Kumar
Anit Kumar

Reputation: 8153

- (void)createAlbumInPhotosLibrary:(NSString *)photoAlbumName videoAtFile:(NSURL *)videoURL {

     // RELIVIT_moments
     __block PHFetchResult *photosAsset;
     __block PHAssetCollection *collection;
     __block PHObjectPlaceholder *placeholder;

      // Find the album
      PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
      fetchOptions.predicate = [NSPredicate predicateWithFormat:@"title = %@", photoAlbumName];
      collection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum
                                                              subtype:PHAssetCollectionSubtypeAny
                                                              options:fetchOptions].firstObject;
      // Create the album
      if (!collection)
      {
          [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
          PHAssetCollectionChangeRequest *createAlbum = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:photoAlbumName];
          placeholder = [createAlbum placeholderForCreatedAssetCollection];

       } completionHandler:^(BOOL success, NSError *error) {

              if (success)
              {
                 PHFetchResult *collectionFetchResult = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[placeholder.localIdentifier]
                                                                                                                options:nil];
                 collection = collectionFetchResult.firstObject;

                 [self saveVideoInRelivitFolderSetPlaceHolder:placeholder photosAsset:photosAsset collection:collection VideoAtFile:videoURL];

                }

            }];

        } else {

            [self saveVideoInRelivitFolderSetPlaceHolder:placeholder photosAsset:photosAsset collection:collection VideoAtFile:videoURL];
        }

 }

 - (void)saveVideoInRelivitFolderSetPlaceHolder:(PHObjectPlaceholder *)placeholderLocal photosAsset:(PHFetchResult *)photosAssetLocal  collection:(PHAssetCollection *)collectionLocal VideoAtFile:(NSURL *)videoURL {

        __block PHFetchResult *photosAsset = photosAssetLocal;
        __block PHAssetCollection *collection = collectionLocal;
        __block PHObjectPlaceholder *placeholder = placeholderLocal;

        // Save to the album
        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:videoURL];
            placeholder = [assetRequest placeholderForCreatedAsset];
            photosAsset = [PHAsset fetchAssetsInAssetCollection:collection options:nil];

            PHAssetCollectionChangeRequest *albumChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection
                                                                                                                          assets:photosAsset];
            [albumChangeRequest addAssets:@[placeholder]];

        } completionHandler:^(BOOL success, NSError *error) {
            if (success)
            {
                NSLog(@"done");
            }
            else
            {
                NSLog(@"%@", error.localizedDescription);
            }
        }];

 }

Upvotes: 2

Related Questions