iOS cómo cargar un gran archivo de activos en Sever mediante transmisión
Soy nuevo programador de iOS.
Quiero subir un archivo grande (video o imagen) desdebiblioteca de activos en sever, Mi forma original es solo usoNSMutableURLRequest y añadirNSData(video grande o imagen grande) y se produjo un bloqueo en el siguiente código:
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset){
//.......some code I just skip it...
ALAssetRepresentation *rep = [asset defaultRepresentation];
void *buffer = [rawData mutableBytes];
[rep getBytes:buffer fromOffset:0 length:size error:nil];
NSData *videoData = [[NSData alloc] initWithBytes:buffer length:size];//crash here
[self startUploading:videoData];
}
Sé que este bloqueo se debe a que la memoria no es suficiente, el archivo de video no se puede asignar a NSData.
Lo he buscado en Google durante 2 días, y parece que hay varias maneras de resolverlo.
y quiero usar el modo de transmisión (punto 2) para cargar cosas,
Encontré este enlace:http://zh.scribd.com/doc/51504708/10/Upload-Files-Over-HTTP
Parece que puede resolver mi problema, pero aún no está muy claro para saber cómo hacerlo
Pregunta 1: hay un ejemplo en ese enlace, el archivo de carga es de paquete
¿Cómo hacer activo en la corriente? o copiar activo a la carpeta de la aplicación?
Encontré este enlaceCopia la imagen de la biblioteca de recursos a una carpeta de aplicaciones
Pero todavía no puede encontrar el camino.
Pregunta 2: o ¿Hay algún otro ejemplo de transmisión más claro para cargar archivos grandes?
Gracias por tu pasion
updated1: después de que implementé el delegado needNewBodyStream, el mensaje "solicitud de agotamiento de la secuencia" pareció solucionarse, pero en su lugar, encontró otro "Dominio de error = kCFErrorDomainCFNetwork Code = 303" No se pudo completar la operación. "¿Cómo resolverlo?
-(NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request
{
[NSThread sleepForTimeInterval:2];
NSInputStream *fileStream = [NSInputStream inputStreamWithFileAtPath:pathToBodyFile];
if (fileStream == nil) {
NSLog(@"NSURLConnection was asked to retransmit a new body stream for a request. returning nil!");
}
return fileStream;
}