如何从ActionDispatch对象中提取路径

时间:2013-08-22 13:00:40

标签: ruby-on-rails ruby ruby-on-rails-3 file-upload actiondispatch

我正在尝试将文件上传到Wistia.com。从params获取path_to_video变量的正确方法是什么,因为它是一个ActionDispatch对象。

控制器是这样的:

def create
 post_video_to_wistia(params[:upload][:file].tempfile)
end

上传代码看起来像这样

def post_video_to_wistia(path_to_video)
  uri = URI('https://upload.wistia.com/')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  request = Net::HTTP::Post::Multipart.new uri.request_uri, {
  'api_password' => [WISTIA_PASSWORD],
  'file' => UploadIO.new(File.open(path_to_video),
  'application/octet-stream',
  File.basename(path_to_video)
    )
  }
  response = http.request(request)
  return response
end

以下是参数:

Parameters: {"upload"=>{"file"=>#<ActionDispatch::Http::UploadedFile:0x007fa8201d58d8 @original_filename="123.mp4", @content_type="video/mp4", @headers="Content-Disposition: form-data; name=\"upload[file]\"; filename=\"123.mp4\"\r\nContent-Type: video/mp4\r\n", @tempfile=#<File:/var/15741-1xiizbz>>}, "commit"=>"Send", "id"=>"2"}

2 个答案:

答案 0 :(得分:0)

params[:file]将为您提供ActionDispatch对象,然后您可以从中获取所需内容。

答案 1 :(得分:-1)

忘记添加时出现此错误:

mount_uploader :image, ImageUploader

到获取分配给它的图像的模型,其中':image'是文件字段的名称。

如果您的文件字段名称不是“图片”,则必须更改:image和ImageUploader以反映您的姓名,例如

mount :picture, PictureUploader