2012-06-26 69 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

相关问题