2010-11-10 54 views
2

我是一个API的后端Rails开发人员,为多个iPhone客户端提供服务。我不是iPhone的开发者。API图像文件上传iPhone到Ruby on Rails

我需要从客户端通过POST请求接受二进制数据(在这种情况下是几个图像文件)到API。

要获取文件内容(除图像类型以外的文件元数据与此无关),iPhone开发人员可能会使用哪些工具?我找到了ObjectiveResource(由Rails上的iPhone使用)和ASIHTTPRequest。在我找到的那些页面中,没有任何迹象表明在执行控制器操作时上传的文件将具有何种形式。它会是一个Ruby文件对象或Tempfile对象吗?我不控制iPhone代码开发,那里存在一些跨文化交流困难,迄今为止他们还没有使用这些建议。如果我能向他们提交更好的信息,我可能会获得更好的数据。

后端应用程序正在运行的Rails 2.3.10,并将很快(在未来数周)可能被转换到Rails 3

谢谢, 克雷格

回答

2

ObjectiveResource本身并不支持文件上传。尽量不使用ASIHTTPRequest在这个片段:

NSURL *url = [NSURL URLWithString:@"http://localhost:3000/file"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:@"Sample" forKey:@"name"]; 
[request setFile:... forKey:@"file"]; 
[request startSynchronous]; 

有关详细信息,请参阅示例页面here(发送数据)。

该帖子将被编码为标准的多部分表单帖子(就像它来自HTML表单一样)。如果您正在使用回形针来存储您的上传,那么魔术就会发生!

1

Use JSON over HTTP

NSMutableURLRequest *request = 
    [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:urlStr]]; 
[request setHTTPMethod: @"POST"]; 
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
NSString* requestDataLengthString = [[NSString alloc] initWithFormat:@"%d", [jsonMessageStr length]]; 
[request setValue:requestDataLengthString forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setHTTPBody:jsonData]; 
NSURLConnection *theConnection = 
    [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];