2012-06-26 116 views
1

因此,您認爲可以很容易地找到ASIFormDataRequest的POST信息的直接示例,但我還沒有在這些格式中找到1:1。這裏是POST請求我想送:ASIFormDataRequest中的多部分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-- 

編輯:

原來我的問題是更多的與服務器接收數據。但這就是我最終的結果!

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其中內容處置和Content-Type設置:

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

我不知道是否有直接從補充該行的簡單方法請求,但是我嘗試過的東西,這似乎是一個工作。

回答

0

您可以更好地使用由ASIFormDataRequest提供的方法,而不是手動構建HTTP正文,這可能會導致錯誤。

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

感謝您的回覆。您所說的內容長度和內容類型是有意義的,因爲這些內容由ASIFormDataRequest填充。但是,我無法檢查身體的內容,這似乎是我的錯誤仍在發生的地方。有沒有辦法檢查這些內容?我試過用setData,addData,setFile和addFile來代替上面的'setData'這一行。 – Katie

+0

您可以發送'buildPostBody'到請求,然後閱讀'postBody'屬性。 –

+0

當我這樣做的時候,我似乎仍然得到(null)postBody。但是,如果我在'addData'(由'setData'調用)的末尾輸出'fileData',則內容包括contentType,我的數據,文件名和密鑰。 – Katie

相關問題