現在、次のコードを使用してファイルをサーバーにアップロードしています
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"]);
}];
}
このアプローチはシミュレーターでは機能しますが、実際のデバイスでは失敗します。おそらく、ローカル ストレージからの読み取りに失敗したために、空のファイルがサーバーにアップロードされます。ログに通知が表示されます
Notice: Sandbox: MyApp(213) deny file-read-data /private/var/mobile/Media/DCIM/101APPLE/IMG_1570.PNG
このメモは、アプリが指定されたパスでファイルにアクセスできないことを意味していると思います。また、リクエスト PHAsset データから返される NSData を追加して、ファイルをアップロードする別の方法を試しました。ただし、この方法はメディア ファイルが大きい場合には使用できません。ファイル全体がメモリにロードされるためです。
何かご意見は?