我对 Ruby on Rails 一无所知,但我知道要做你想做的事情(让用户将带有姓名和 GPS 位置的照片上传到服务器,然后允许其他用户通过下载来查看该照片到他们的应用程序)。
构建服务器的一种方法是使用 Ruby on Rails 构建 Web 服务。
网络服务
Web 服务(您的服务器)做两件事:
1) 接受请求
2) 返回响应
使用 Web 服务,您接受 HTTP POST 或 GET 请求,然后您的服务器的逻辑代码将解析 POST 或 GET 中的“参数”或“变量”。
一旦您的服务器拥有这些变量,它就可以将它们保存到数据库中(ORM 确实会更容易)。
然后,您的 Web 服务可以使用HTTP 状态代码或JSON格式的响应返回响应。
示例场景
1) iPhone 应用程序拍摄照片,然后使用 ASIHttpRequest 或 AFNetworking 向您的 Ruby 服务器发出HTTP POST请求。
// ASIExample
-(void)uploadPhotoToServer
{
NSURL *url = [NSURL urlWithString:myUploadWebServiceURL];
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
// ---------------------------------------------------------------
// setting the POST parameters below
// note: you will need to get the NSData from a UIImage object
// ---------------------------------------------------------------
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];
[request setPostValue:fldName.text forKey:@"name"];
[request setPostValue:[NSNumber numberWithDouble:myLatitude] forKey:@"latitude"];
[request setPostValue:[NSNumber numberWithDouble:myLongitude] forKey:@"longitude"];
[request setCompletionBlock:^{
int statusCode = [request responseStatusCode];
if(statusCode == 200)
{
[self alertUploadComplete];
}
}];
[request setFailBlock:^{
NSLog(@"Server error: %@", [[request error] localizedDescription]);
[self alertConnectionProblem];
}];
[request startAsynchronous];
}
2)服务器接收请求,解析数据并返回响应
// Symfony Web Framework example (PHP based web framework)
public function uploadPhotoAction()
{
// --------------------------------------------------
// check to make sure all POST parameters are sent
// in the POST request by iPhone app.
// --------------------------------------------------
if(
!isset($_REQUEST['name']
|| !isset($_REQUEST['latitude']
|| !isset($_REQUEST['longitude']
|| !isset($_REQUEST['photo']
)
{
return new Response($this->sendResponse(406, 'Missing POST parameters');
}
else // assumes safe to continue
{
/*
write code to save the your name, latitude, longitude to your database here
*/
/*
save your photo to your server's dedicated photo folder, then store
the file path to the file in your database entry in the above step
*/
return new Response($this->sendResponse(200, 'Photo uploaded'));
}
}