AdamTheRaysFan
AdamTheRaysFan

Reputation: 175

iOS - Get File Size of Image Selected From Photo Reel

I'm building an app that allows users to select photos and videos from their device and upload them to the server. Trying to get the file size (in bytes) of each item select, can anyone help me out?

if ([dict objectForKey:UIImagePickerControllerMediaType] == ALAssetTypePhoto){ // image file
        if ([dict objectForKey:UIImagePickerControllerOriginalImage]){
            NSURL* urlPath=[dict objectForKey:@"UIImagePickerControllerReferenceURL"];

            item = [BundleItem itemWithPath:urlPath AndDescription:nil];
            item.itemImage = [dict objectForKeyedSubscript:UIImagePickerControllerOriginalImage];
            item.itemType = 1; // image
            item.itemSize = // what do I need here??
            [m_items addObject:item];
        }
    } else if ([dict objectForKey:UIImagePickerControllerMediaType] == ALAssetTypeVideo){ // video file
        if ([dict objectForKey:UIImagePickerControllerOriginalImage]){
            NSURL* urlPath=[dict objectForKey:@"UIImagePickerControllerReferenceURL"];
            item = [BundleItem itemWithPath:urlPath AndDescription:nil];
            item.itemImage = [dict objectForKeyedSubscript:UIImagePickerControllerOriginalImage];
            item.itemType = 2; // video
            item.itemSize = // what do I need here??
            [m_items addObject:item];
        }
    }

EDIT

Getting NSCocaoErrorDomain 256 with videos:

            NSURL* urlPath=[dict objectForKey:@"UIImagePickerControllerReferenceURL"];

            item = [BundleItem itemWithPath:urlPath AndDescription:nil];
            item.itemImage = [dict objectForKeyedSubscript:UIImagePickerControllerOriginalImage];
            item.itemType = 2; // video

            //Error Container
            NSError *attributesError;
            NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[urlPath path] error:&attributesError];
            NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
            long fileSize = [fileSizeNumber longValue];
            item.itemSize = fileSize;

            [m_items addObject:item];

Upvotes: 3

Views: 3068

Answers (1)

Mrunal
Mrunal

Reputation: 14128

For only image data selection:

item.itemImage = (UIImage*)[info valueForKey:UIImagePickerControllerOriginalImage];
NSData *imgData = UIImageJPEGRepresentation(item.itemImage, 1); //1 it represents the quality of the image.
NSLog(@"Size of Image(bytes):%d",[imgData length]);

Hope this will help you.

Below method is generalize, it will work for both image and video:

Something like this should take care finding the file size of a selected image or video returned from the UIImagePickerController

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

        NSURL *videoUrl=(NSURL*)[info objectForKey:UIImagePickerControllerMediaURL];

        //Error Container
        NSError *attributesError;
        NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[videoUrl path] error:&attributesError];
        NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
        long long fileSize = [fileSizeNumber longLongValue];
}

Upvotes: 2

Related Questions