ios - 使用载波将图像从 iphone 应用程序上传到 Rails 应用程序

标签 ios objective-c ruby-on-rails ruby carrierwave

我正在尝试使用载波通过内部 API 将图像从 iPhone 应用程序发送到 Rails 应用程序。我已经将大部分代码与关于堆栈溢出的其他问题和在线示例放在一起 - 我以前从未做过这种类型的事情。我没有 iPhone 代码,因为我们正在外包它,但我可以得到它。

我的 ApiController 中接收请求的代码如下所示:

  def create_item
    @item = upload_image(params[:img], params[:name], params[:content_type], params[:file_size])
  end

  private

  def upload_image(img, name, content_type, file_size)
    encoded_img = Base64.encode64(img)
    io = FilelessIO.new(Base64.decode64(encoded_img))
    io.original_filename = "#{name}"
    item = Item.new

    item.cover = io
    item.content_type = content_type
    item.file_size = file_size
    item.save!(validate: false)
    item
  end

当他们发送请求时,参数看起来像下面的代码,并给他们一个 500 错误。

Parameters: {"img"=>#<ActionDispatch::Http::UploadedFile:0x007fc3b1f4f570 @original_filename="avatar.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"img\"; filename=\"avatar.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20130703-2-hfx7gg>>;, "controller"=>"api/v1/api", "action"=>"create_item", "uid"=>"100003052137695"}

我得到的错误是:

  no implicit conversion of ActionDispatch::Http::UploadedFile into String
  vendor/ruby-2.0.0/lib/ruby/2.0.0/base64.rb:38:in `pack'

最佳答案

您收到的错误表明 iPhone 正在发送实际文件,而您希望它从您的代码发送 Base64 字符串。

与您的 iPhone 团队核实并商定所需的格式:

  1. 他们发送 Base64 字符串,你应该可以克服这个错误
  2. 您更改代码以接受文件(类似于 item.cover = params[:img])

HTH

关于ios - 使用载波将图像从 iphone 应用程序上传到 Rails 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17467068/

相关文章:

objective-c - 显示来自 NSDocumentDirectory 的照片

ios - 如何比较前缀 header 中的 $PRODUCT_NAME?

ios - 在 UITableView 中显示 Coredata

ios - 在幻灯片上停止 UILocalNotification Sound 以查看

ios - 收集 View IOS 中的 UILABEL 换行符

iOS 应用程序停止工作,配置文件被删除

ruby-on-rails - 在 MAC OS 10.9 Mavericks(测试版)上安装 RAILS

ruby-on-rails - 独立运行 Rails Engine

ruby-on-rails - 为 Rails 3、RVM、gems 疯狂

objective-c - iOS:RestKit 加载对象并发送参数