2012-08-23 4 views
0

매우 간단하다고 생각하지만 어떻게해야하는지 알 수 없습니다. AFNetworking 라이브러리를 사용하여 웹 서비스에 PUT 요청을 사용하여 파일을 업로드하고 싶습니다. 이것은 컬 내가, 내가 (AFHTTPClient 및 putPath와) PUT 요청을 사용한 POST 및 기타 웹 서비스에 양식 데이터를 사용하여 파일을 업로드 할 수있었습니다AFNetworking을 사용한 간단한 "PUT"파일 업로드

mac:~ user$ curl --verbose -T image.jpeg http://server.org:8001/social/test.jpg 
* About to connect() to server.org port 8001 (#0) 
* Trying 123.45.123.123... 
* connected 
* Connected to server.org (123.45.123.123) port 8001 (#0) 
> PUT /social/test.jpg HTTP/1.1 
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5 
> Host: server.org:8001 
> Accept: */* 
> Content-Length: 78341 
> Expect: 100-continue 
> 
< HTTP/1.1 100 CONTINUE 
< Server: cx1193719-b 
< Content-Type: Text/Html 
< Accept-Ranges: bytes 
< Content-Length: 0 
* We are completely uploaded and fine 
< HTTP/1.1 200 OK 
< Server: cx1193719-b 
< Content-Type: Text/Html 
< Accept-Ranges: bytes 
< Content-Length: 0 
< 
* Connection #0 to host server.org left intact 
* Closing connection #0 

서비스를 테스트하는 데 사용되는 명령하지만 아직도이다 간단한 파일 업로드 방법을 이해하지 못합니다.

도움 주셔서 감사합니다.

답변

4

이것은 AFNetworking FAQ의 일부입니다. https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ을 확인하십시오. 이 답변에 제안

- (void)putPath:(NSString *)path 
    parameters:(NSDictionary *)parameters 
      data:(NSData*)data 
     success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success 
     failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; 

: https://stackoverflow.com/a/9014768/634940 당신이 AFHTTPClient의 서브 클래스를 사용하는 경우

은 또한 다음과 유사한 뭔가를 확장 할 수 있습니다. 그와

구현하고 AFHTTPClient 서브 클래스 '기본 URL http://server.org에 당신이 가서 호출 할 수 있습니다 설정 : 내가 AFNetworking 2.0을 사용하고 있는데 같은 일을 궁금

NSData *imageData = [NSData dataWithContentsOfFile:pathToYourJPEGFile]; 
[client putPath:@"social/test.jpg" 
    parameters:nil 
      data:imageData 
     success:yourSuccessBlock 
     failure:yourFailureBlock]; 
+0

좋아, 내가려고하지 않음 아래로 이동하거나 httpclient를 하위 클래스로 만들지 만 이것이 유일한 대답이라고 생각합니다. 감사합니다. – Nextorlg

9

. 여기에 내가 무엇을 끝까지했다 :

// manager needs to be init'd with a valid baseURL 
NSURL *baseURL = [AfarHTTPSessionManager sharedManager].baseURL; 
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; 

NSData *imageData = UIImageJPEGRepresentation(draftHighlight.largeImage, 1); 

// need to pass the full URLString instead of just a path like when using 'PUT' or 'POST' convenience methods 
NSString *URLString = [NSString stringWithFormat:@"%@%@", baseURL, _the_rest_of_your_path]; 
NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"PUT" URLString:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:imageData name:kCreateHighlightAPIKeyImage fileName:@"highlight_image.jpg" mimeType:@"image/jpeg"]; 
}]; 

// 'PUT' and 'POST' convenience methods auto-run, but HTTPRequestOperationWithRequest just 
// sets up the request. you're responsible for firing it. 
AFHTTPRequestOperation *requestOperation = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    // success 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    // failure 
}]; 

// fire the request 
[requestOperation start]; 
+0

'AFHTTPSessionManager'를 사용하기 때문에이 솔루션은 iOS7 이상에서만 작동합니다. –

0

djibouti33의 대답은 제 의견으로는 꽤 좋습니다. 한 가지주의 할 점은, 답변의 multipartFormRequest 메소드가 사용되지 않기 때문입니다.

여기에 참고는 다음과 같은 작업을 수행하여 참조로에서 오류를 전달하려는 것이 오
- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method 
               URLString:(NSString *)URLString 
              parameters:(NSDictionary *)parameters 
           constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block 
                error:(NSError *__autoreleasing *)error 

이 : 지금 AFNetworking하면 사용하는 것이 좋습니다

NSError *requestError = nil; 
NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"PUT" URLString:path parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:photoData name:@"file" fileName:@"image" mimeType:@"image/png"]; 
} error:&requestError]; 
관련 문제