使用 ASIHTTPRequest 从 iPhone 上传到 Ruby on Rails

Posted

技术标签:

【中文标题】使用 ASIHTTPRequest 从 iPhone 上传到 Ruby on Rails【英文标题】:Uploading to Ruby on Rails from iPhone using ASIHTTPRequest 【发布时间】:2010-12-14 05:31:35 【问题描述】:

我真的碰壁了,需要一些帮助!感谢您阅读本文!

我正在编写一个应用程序,它可以与我的 ROR 网络服务器对话以获取数据库请求,并且非常感谢 ActiveResource。但是我现在还需要将文件上传到服务器,并且我计划使用看起来很棒的 ASIHTTPRequest,但我的问题是我只是不确定如何在 ROR 端处理 POST 请求......我正在使用回形针但确实碰壁了。

在 ASIHTTP 方面,我只是在写:

[request setData:data withFileName:@"photo.jpg" andContentType:@"image/jpeg" forKey:@"asset[image]"];

在红宝石方面我正在做...

class Asset < ActiveRecord::Base
   validates_attachment_presence :image
    has_attached_file :image
end

class AssetsController < ApplicationController  
    protect_from_forgery :only => [:update, :destroy] 
.....

但它总是失败,我很确定它与 POST 表单数据集有关,但我完全卡住了。

我收到了错误:

 Parameters: "assets"=>"images"=>#<File:/var/folders/gM/gM15qjM2G3W0iVNaT1evD++++TI/-Tmp-/RackMultipart20091112-2285-2i0qq5-0>

NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]):
  app/models/asset.rb:2
  app/controllers/assets_controller.rb:46:in

`创建'

我们将非常感谢您的任何帮助。

克里斯

谢谢!

【问题讨论】:

【参考方案1】:

我在上传时要检查的第一件事是将参数名称设置为 file_column(或者我个人使用 Paperclip)所期望的。

如果你有类似的东西:

class Entry < ActiveRecord::Base
    file_column :image
end

您需要确保参数(表单字段名称)与预期相符。对于上面的示例,这将是:

name="entry[image]"

另外,请确保您发布的是多部分表单,而不仅仅是标准。

【讨论】:

我还发现需要包含 [request setPostValue:@"Create" forKey:@"commit"];

以上是关于使用 ASIHTTPRequest 从 iPhone 上传到 Ruby on Rails的主要内容,如果未能解决你的问题,请参考以下文章

使用 Asihttprequest 和 iPhone 的 Json 框架解析 JSON 数据

ASIHTTPRequest setPostValue iPhone

使用 ASIHTTPRequest 下载 plist 只能部分工作

在 iPhone 后台下载

覆盖 ASIHTTPRequest 的方法

ASIHttpRequest 可达性版本