目前我正在使用以下代码将文件上传到服务器
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"]);
}];
}
这种方法在模拟器上有效,但在真实设备上失败:空文件上传到服务器很可能是由于无法从本地存储读取。日志显示通知
注意:沙盒:MyApp(213) 拒绝文件读取数据 /private/var/mobile/Media/DCIM/101APPLE/IMG_1570.PNG
我相信这个注释意味着应用程序无法通过指定路径访问文件。此外,我尝试了另一种上传文件的方法,方法是附加从请求 PHAsset 数据返回的 NSData 。但是这种方法在大型媒体文件的情况下是不可用的。因为整个文件被加载到内存中。
有什么想法吗?