Convertir un archivo a un String en base64 y viceversa - Snippet Objective C
Bueno se que este tópico no viene mucho al caso en este blog, cuyo objetivo inicial fue otro. Pero ya que no encontraba donde colocarlo pues ni modo.
Como lo referencia el título de la entrada esta corresponde con un Snippet para Objective C, mediante el cual podemos codificar un archivo de cualquier tipo de extensión en un String en Base64, y posteriormente mediante el mismo String codificado recrear de nuevo el mismo archivo.
Bueno sin más que acotar, les dejo con los métodos creados para esta tarea:
El primer método "fileToBase64StringFromPath" recibirá un path del archivo a crear mediante NSData procesara el archivo y lo codificara en Base64 para retornarlo como NSString.
/**
* Generar un string en base64 a partir de un archivo
* @Param filePath NSString que indica el path del archivo a ser usado
* @Returns NSString devuelve una cadena de strings en formato base64 del archivo
*/
- (NSString *)fileToBase64StringFromPath:(NSString *)filePath {
NSData* contentDataFile = [[NSData alloc] initWithContentsOfFile:filePath];
NSString* base64String = [contentDataFile base64EncodedStringWithOptions:0];
return base64String;
}
El segundo método "
fileFromBase64String" recibirá el String en Base64 y el path o ruta del archivo a generar y de manera similar a la anterior mediante NSData creamos el archivo respectivo, retornando si la tarea fue completada o no usando un Bool.
/**
* Generar un archivo a partir de un string en base64
* @Param base64String NSString que contiene el string en base64
* @Param filePath NSString que indica el path del archivo a ser creado
* @Returns Bool devuelve si el archivo fue creado o no
*/
- (BOOL)fileFromBase64String:(NSString *)base64String filePath: (NSString *)filePath{
NSData* contentDataFile = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
return [contentDataFile writeToFile:filePath atomically:YES];
}
Aclarando un tema para el siguiente código, este proyecto fue probado sobre una aplicación móvil por lo que para la invocación a los métodos creamos el path respectivo a la carpeta Documents de la app para posteriormente añadir los nombres de los archivos a ser procesados.
NSString *fileName = @"archivo.pdf";
NSString *fileNameCopy = @"archivocopy.pdf";
NSString* documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *base64String = [self fileToBase64StringFromPath:[[documentsDir stringByAppendingString:@"/"]stringByAppendingString:fileName]];
[self fileFromBase64String:base64String filePath:[[documentsDir stringByAppendingString:@"/"]stringByAppendingString:fileNameCopy]];
PD: No olvidar colocar el archivo en la ruta respectiva para que pueda ser procesado a Base64. Pueden imprimir el Path del mismo con:
NSLog(@"Directorio: %@", documentsDir);