PHAsset + AFNetworking. Não foi possível fazer upload de arquivos para o servidor em um dispositivo real
Atualmente, estou usando o seguinte código para fazer upload de arquivos para o servidor
NSURLRequest *urlRequest = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[[entity uploadUrl]absoluteString] parameters:entity.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// Get file url
[UploadModel getAassetUrl:entity.asset resultHandler:^(NSURL *fileUrl) {
NSError *fileappenderror;
// Append
[formData appendPartWithFileURL:fileUrl name:@"data" error:&fileappenderror];
if (fileappenderror) {
[Sys MyLog: [fileappenderror localizedDescription] ];
}
}];
} error:&urlRequestError];
/ * getAassetUrl * /
+(void)getAassetUrl: (PHAsset*)mPhasset resultHandler:(void(^)(NSURL *imageUrl))dataResponse{
PHImageRequestOptions * requestOption = [[PHImageRequestOptions alloc] init];
requestOption.synchronous = YES;
requestOption.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
[[PHImageManager defaultManager] requestImageDataForAsset:mPhasset options:requestOption resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
dataResponse([info objectForKey:@"PHImageFileURLKey"]);
}];
}
Essa abordagem funciona em um simulador, mas falha em um dispositivo real: os arquivos vazios são carregados no servidor, provavelmente devido à falha na leitura do armazenamento local. Log mostra o aviso
Aviso: Sandbox: MyApp (213) nega arquivo-leitura-dados /private/var/mobile/Media/DCIM/101APPLE/IMG_1570.PNG
Acredito que esta nota significa que o aplicativo não pode acessar o arquivo pelo caminho especificado. Também tentei uma abordagem alternativa ao fazer upload de arquivo anexando ao NSData, que é retornado dos dados do pedido PHAsset. mas essa abordagem não pode ser usada no caso de arquivos de mídia grandes. desde que o arquivo inteiro seja carregado na memória.
Alguma ideia?