2012-06-26 2 views
1

그래서 ASIFormDataRequest에 대한 POST 정보의 직접적인 예제를 쉽게 찾을 수 있다고 생각하지만이 형식으로 1 : 1을 찾지 못했습니다. 여기에 내가 보낼 POST 요청의 :ASIFormDataRequest에서 직접 multipart POST 요청

POST /fileXfer HTTP/1.1 
Content-Type: multipart/form-data; boundary=AaB03x 
Content-Length: 200 
AppID:myID 
TransferID:abcd1234 

-- AaB03x 
Content-Disposition: form-data; name="data"; filename="xxx" 
Content-Type: application/octet-stream 
Content-Length: 100 

... contents of file ... 

--AaB03x-- 

편집 :

내 문제는 데이터를 수신하는 서버와 더 있었다 밝혀졌습니다. 그러나 이것은 내가 결국 함께했던 것이다!

[self appendPostString:[NSString stringWithFormat:@"Content-Length: %lu\r\n\r\n", [data length]]];` 

내가 직접 그 줄을 추가하는 쉬운 방법이 있는지 확실하지 않습니다 :

NSURL *url = [NSURL URLWithString:@"http://IP:PORT/fileXfer"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostFormat:ASIMultipartFormDataPostFormat]; 

//Sets headers of POST 
[request addRequestHeader:@"X-Application-Id" value:@"myID"]; 
[request addRequestHeader:@"X-Transfer-Id" value:@"abcd1234"]; 

//Sets data 
NSData *fileData = [NSData dataWithContentsOfFile:kEncryptedFilePath]; 
[request setData:fileData withFileName:@"xxx" andContentType:@"application/octet-stream" forKey:@"data"]; 

[request setDelegate:self]; 
[request startAsynchronous]; 

은 또한 내용 - 처리 및 내용 - 형식이 설정되어 ASIFormDataRequest의 buildMultipartFormDataPostBody에 다음 줄을 추가 요청했지만, 내가 시도한 것들 중에서 이것은 효과가있는 것으로 보였다.

답변

0

오류로 이어질 수있는 HTTP 본문을 수동으로 작성하는 대신 ASIFormDataRequest에서 제공하는 방법을 사용하는 것이 좋습니다.

NSURL *url = [NSURL URLWithString:@"http://IP:PORT/fileXfer"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

[request addRequestHeader:@"X-Application-Id" value:@"myID"]; 
[request addRequestHeader:@"X-Transfer-Id" value:@"abcd1234"]; 

[request setData:[self fileData] withFileName:@"xxx" andContentType:@"application/octet-stream" forKey:@"data"]; 

[request setDelegate:self]; 
[request startAsynchronous];
+0

답장을 보내 주셔서 감사합니다. Content-Length와 Content-Type은 ASIFormDataRequest에 의해 채워지므로 생략하는 것이 좋습니다. 그러나, 나는 신체의 내용을 검사 할 수 없다. 그리고 이것은 나의 오류가 여전히 발생하고있는 곳인 것처럼 보인다. 이 콘텐츠를 확인할 수있는 방법이 있습니까? 위의'setData' 라인 대신에 setData, addData, setFile, addFile을 사용해 보았습니다. – Katie

+0

'buildPostBody'를 요청에 보내고'postBody' 속성을 읽을 수 있습니다. –

+0

나는 postBody를 위해 (null)을 얻는 것처럼 보입니다. 그러나,'setData'에 의해 호출되는'addData'의 끝에'fileData'를 출력하면 내용은 contentType, my data, 파일 이름과 키를 포함합니다. – Katie