iOS como fazer upload de um arquivo de ativos grande em sever por streaming
Eu sou novo programador iOS.
Quero fazer upload de um arquivo grande (vídeo ou imagem) debiblioteca de ativos em sever, Meu jeito original é apenas usarNSMutableURLRequest e acrescentarNSData(vídeo grande ou imagem grande) para ele, e travamento aconteceu no seguinte 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];
}
Eu sei que esse acidente é porque a memória não é suficiente, o arquivo de vídeo não pode apenas alocar para NSData.
Eu tenho google isso por 2 dias, e parece que existem várias maneiras de resolver isso.
e eu quero usar a maneira de streaming (ponto 2) para fazer upload de material,
Eu encontrei este link:http://zh.scribd.com/doc/51504708/10/Upload-Files-Over-HTTP
Parece que pode resolver o meu problema, mas ainda não está muito claro para saber como fazer
Questão 1: há um exemplo nesse link, o arquivo de upload é do pacote
como transformar o recurso em fluxo? ou copiar recurso para a pasta do APP?
Achei esse linkCopiar imagem da biblioteca de recursos para uma pasta de aplicativos
mas ainda não consegue encontrar o caminho.
Questão 2: ou Existe algum outro exemplo de streaming mais claro para fazer o upload de arquivos grandes?
Obrigado pela sua paixão
updated1: depois de implementar o delegado needNewBodyStream, a mensagem "esgotamento do fluxo de solicitação" pareceu resolvida, mas em vez disso, conhecer outro "Domínio de erro = kCFErrorDomainCFNetwork Code = 303" A operação não pôde ser concluída. "como resolvê-lo?
-(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;
}