使用 ruby​​/rails 将文件上传到网站

Posted

技术标签:

【中文标题】使用 ruby​​/rails 将文件上传到网站【英文标题】:uploading a file to a website with ruby/rails 【发布时间】:2010-09-28 07:21:12 【问题描述】:

我正在构建一个 Rails 应用程序来测试我们的旗舰产品(也是基于 Web 的)。问题是部分测试需要使用生产应用程序的 Web 界面来上传文件。所以我需要做的是让 rails 应用程序将这些文件上传到生产应用程序(而不是 rails)。有没有办法让 Rails 将文件发布到生产应用程序(就像浏览器将文件发布到生产应用程序一样)?

【问题讨论】:

【参考方案1】:

Paperclip gem 确实是一个解决方案。它也适用于其他格式,并且很容易在 Rails 中实现。看看视频..!!

http://railscasts.com/episodes/134-paperclip

【讨论】:

【参考方案2】:

如果你只是需要上传文件,我认为为此使用插件是没有意义的。文件上传非常非常简单。

class Upload < ActiveRecord::Base
  before_create :set_filename
  after_create :store_file
  after_destroy :delete_file

  validates_presence_of :uploaded_file

  attr_accessor :uploaded_file

  def link
    "/uploads/#CGI.escape(filename)"
  end

  private

  def store_file
    File.open(file_storage_location, 'w') do |f|
      f.write uploaded_file.read
    end
  end

  def delete_file
    File.delete(file_storage_location)
  end

  def file_storage_location
    File.join(Rails.root, 'public', 'uploads', filename)
  end

  def set_filename
    self.filename = random_prefix + uploaded_file.original_filename
  end

  def random_prefix
    Digest::SHA1.hexdigest(Time.now.to_s.split(//).sort_by rand.join)
  end
end

然后,您的表单可能如下所示:

<% form_for @upload, :multipart => true do |f| %>
  <%= f.file_field :uploaded_file %>
  <%= f.submit "Upload file" %>
<% end %>

我认为代码几乎是不言自明的,所以我不会解释它; )

【讨论】:

【参考方案3】:

您可能想查看回形针插件。非常适合上传图片。也可能适用于其他格式。

【讨论】:

【参考方案4】:

当然,使用 net/http 库...

http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html

但它似乎缺少多部分编码,因此请查看另一篇文章

http://kfahlgren.com/blog/2006/11/01/multipart-post-in-ruby-2/

看看这个类似的问题

Ruby: How to post a file via HTTP as multipart/form-data?

【讨论】:

以上是关于使用 ruby​​/rails 将文件上传到网站的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 流从 Ruby 上传到 S3

ruby 将CSV流从Rails上传到S3

Ruby on rails在主机上传[关闭]

Ruby on Rails 中的基本图像大小调整

Ruby on Rails AJAX文件上传

使用 cloudinary 直接上传 - “没有这样的文件或目录”错误,可能是我的 ruby​​ on rails 代码中的某个错误