2011-07-30 7 views
4

카메라 롤에서 exif 데이터를 비롯한 웹 서비스로 사진을 보내려합니다. ASIFormDataRequest를 사용하여 임 - 그래서 나는 수행ALAsset, exif 데이터를 포함한 웹 서비스로 사진 보내기

ASIFormDataRequest *request = [[ASIFormDataRequest alloc]initWithURL:url]; 

내가 직접 파일을 전송하려면 메모리를 저장하려면 :

[request addFile:localPath forKey:@"image"]; 

그래서 내가 자산의 로컬 경로가 필요합니다. 나는 자산의 로컬 경로를 얻을 수 있다고 생각, 그래서 임시 파일에 자산을 저장

ALAsset* selectedAsset = [assets objectAtIndex:index]; 
CGImageRef imageRef = selectedAsset.defaultRepresentation.fullScreenImage; 
UIImage* image = [UIImage imageWithCGImage:imageRef]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachesDirectory = [paths objectAtIndex:0]; 

NSData* imageData = UIImagePNGRepresentation(image); 
NSString* filePath = [NSString stringWithFormat:@"%@/imageTemp.png",cachesDirectory]; 
[imageData writeToFile:filePath atomically:YES]; 
다음

나중에 내가 이미지를 얻는

[request addFile:localPath forKey:@"image"]; 

을이 경로를 사용 서버로 보내지 만 필요한 exif 데이터는 없습니다. 게다가, 나는 그것을하는 더 똑똑한 방법이 있어야한다고 생각합니다.

tier

+0

당신이의 url 속성으로 시도 모든 EXIF ​​데이터를 유지 ALAsset의 기본 표현은 무엇입니까? – Johnmph

+0

예. 확인을 위해서만 의미가있는 것처럼 보입니다. 테스트 한만큼 자산에 액세스 할 수 없습니다. 예를 들어 [NSData dataWithContentsOfURL :]은 nil을 반환합니다. – HeikoG

답변

10

확인 - 생각해 냈습니다. 트릭은 defaultRepresentaion의 원시 데이터를 이동하는 것입니다 : 서버에서 서버로 파일을 이미지를 전송하기 위해 경로를 사용하면

ALAsset* selectedAsset = [assets objectAtIndex:index]; 

int byteArraySize = selectedAsset.defaultRepresentation.size; 

NSMutableData* rawData = [[NSMutableData alloc]initWithCapacity:byteArraySize]; 
void* bufferPointer = [rawData mutableBytes]; 

NSError* error=nil; 
[selectedAsset.defaultRepresentation getBytes:bufferPointer fromOffset:0 length:byteArraySize error:&error]; 
if (error) { 
    NSLog(@"%@",error); 
} 
rawData = [NSMutableData dataWithBytes:bufferPointer length:byteArraySize]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachesDirectory = [paths objectAtIndex:0]; 
NSString* filePath = [NSString stringWithFormat:@"%@/imageTemp.png",cachesDirectory]; 
[rawData writeToFile:filePath atomically:YES]; 

+0

고맙습니다.이 스 니펫은 정말 생명의 은인이었습니다 !! –

+0

NSMutableData rawData를 업로드하면 EXIF ​​세부 정보와 함께 이미지가 업로드됩니다. 맞습니까? –

+1

예. 원시 데이터에는 이미지와 EXIF ​​메타 정보가 포함되어 있습니다. – HeikoG