ruby-on-rails-3 - 使用 Carrierwave 将原始文件上传到 Rails

标签 ruby-on-rails-3 carrierwave

我的客户正在尝试从 Blackberry 和 Android 手机上传图像。他们不喜欢发布 a) 表单参数或 b) 多部分消息。他们想要做的是仅使用文件中的数据对 url 执行 POST。

像这样的事情可以在 curl 中完成:curl -d @google.png http://server/postcards/1/photo.json -X POST
我希望将上传的照片放入明信片模型的照片属性中并放入正确的目录中。

我正在 Controller 中做类似的事情,但目录中的图像已损坏。我现在正在手动将文件重命名为“png”:

def PostcardsController < ApplicationController
...
# Other RESTful methods
...
def photo
  @postcard = Postcard.find(params[:id])
  @postcard.photo = request.body
  @postcard.save
end

该模型:
class Postcard < ActiveRecord::Base
  mount_uploader :photo, PhotoUploader
end

最佳答案

这可以完成,但您仍然需要您的客户发送原始文件名(如果您对类型进行任何验证,还需要发送内容类型)。

def photo
  tempfile = Tempfile.new("photoupload")
  tempfile.binmode
  tempfile << request.body.read
  tempfile.rewind

  photo_params = params.slice(:filename, :type, :head).merge(:tempfile => tempfile)
  photo = ActionDispatch::Http::UploadedFile.new(photo_params)

  @postcard = Postcard.find(params[:id])
  @postcard.photo = photo

  respond_to do |format|
    if @postcard.save
      format.json { head :ok }
    else
      format.json { render :json => @postcard.errors, :status => :unprocessable_entity }
    end
  end
end

现在您可以使用设置照片
curl http://server/postcards/1/photo.json?filename=foo.png --data-binary @foo.png

并指定内容类型使用 &type=image/png .

关于ruby-on-rails-3 - 使用 Carrierwave 将原始文件上传到 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6415895/

相关文章:

ruby-on-rails - 有谁知道是否可以将载波背景程序 (store_in_background) 与 Heroku 集成?

ruby-on-rails - 在 S3 和 cloudfront 上使用 rails carrierwave 私有(private)文件

ruby - Carrierwave + MiniMagick - 如何将动画 GIF 压缩到第一帧?

javascript - 如何使 Javascript 警报框显示来自 Rails Controller 的变量

ruby-on-rails-3 - wkhtmltopdf(带有 pdfkit)安装在 Ubuntu 上,但不能在 Rails 中工作

ruby-on-rails - 使用 Grape API 将文件发送到客户端

ruby-on-rails - carrierwave gem 上的捆绑安装错误

ruby-on-rails - Multi-Tenancy rails 应用程序 : what are the pros and cons of different techniques?

ruby-on-rails-3 - 如何在视觉上区分 Rails 应用程序的开发/测试/生产模式?

ruby-on-rails - 在 Ruby On Rails 中声明内联 key