티스토리 뷰

Mobile/iOS

[iOS]Multipart 전송

out of coding 2016. 11. 8. 11:29

멀티파트 파일 전송방법.

라이브러리를 사용하면 그냥 아주 쉽게 되지만. 그래도 개념은 알아야 하니깐.

나는 dictionary 부분에 NSData를 넣어주어서, 사용하도록 하였음.


구조는 간단함. 


바운더리

내용

바운더리

내용

바운더리


이러한 형식으로 데이터를 전송하면 됨.

아래는 소스. 서버 환경에 맞춰서 잘 구성하시면 됨.


NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url

  cachePolicy:NSURLRequestUseProtocolCachePolicy

  timeoutInterval:timeOut];

[request setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithFormat:@"---------------------sdaklfjsdalkfasdlfjsadlf32344-----sadfjk324"];

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];

[*request addValue:contentType forHTTPHeaderField:@"Content-Type"];


NSMutableData *body = [NSMutableData data];


for(NSString *key in [dictionary allKeys]) {

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

id value = [dictionary objectForKey:key];

if([value isKindOfClass:[NSData class]]) {

NSString *dispositionFormat = @"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n]";

[body appendData:[[NSString stringWithFormat:dispositionFormat, key, key] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"Content-Type: application/octet-stream\r\n\r\n]"]

 dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:(NSData*)value];

} else {

[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\n\r\n]", key]

 dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithString:(NSString*)value]

 dataUsingEncoding:NSUTF8StringEncoding]];

}

}


[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];


[*request setHTTPBody:body];


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함