【问题标题】:Rails3 carrierwave not uploadingRails3载波未上传
【发布时间】:2012-10-17 18:34:57
【问题描述】:

我试过这个教程:http://railscasts.com/episodes/253-carrierwave-file-uploads?autoplay=true。 我不能让它工作。我的文件没有上传,但我可以看到数据已发送到控制器。

class PublicationsController < ApplicationController
  respond_to :html, :js, :json, :xml
  def create
    @publication = Publication.create(params[:publication])
    ...
  end
end

更新:

<form novalidate="novalidate" method="post" id="new_publication" enctype="multipart/form-data" class="simple_form publication" action="/sl/publications" accept-charset="UTF-8"><div style="margin:0;padding:0;display:inline"><input type="hidden" value="✓" name="utf8"><input type="hidden" value="vny2UjREsnQLZkUjH3zNxC8Cz5tvG/sAcllyjzZ+PWo=" name="authenticity_token"></div>
          <div class="inputs">
            <div class="input string required"><label for="publication_full_name" class="string required"><abbr title="obvezno">*</abbr> Name</label><input type="text" size="50" required="required" name="publication[full_name]" maxlength="255" id="publication_full_name" class="string required"></div>
            <div class="input string email required"><label for="publication_email" class="email required"><abbr title="obvezno">*</abbr>Mail</label><input type="email" size="50" required="required" name="publication[email]" maxlength="255" id="publication_email" class="string email required"></div>
            <div class="input string required"><label for="publication_subject" class="string required"><abbr title="obvezno">*</abbr>Subject</label><input type="text" size="50" required="required" name="publication[subject]" maxlength="255" id="publication_subject" class="string required"></div>
            <div class="input text required"><label for="publication_text" class="text required"><abbr title="obvezno">*</abbr>Text</label><textarea rows="20" required="required" name="publication[text]" id="publication_text" cols="40" class="text required"></textarea><span class="hint">You can uncomment the line below if you need to overwrite.</span></div>
            <div class="input file required"><label for="publication_attachment" class="file required"><abbr title="obvezno">*</abbr> Attachment</label><input type="file" required="required" name="publication[attachment]" id="publication_attachment" class="file required"></div>
          </div>
          <div class="buttons">
            <input type="submit" value="Create Publication" name="commit" id="publication_submit" class="button">
          </div>
        </form>

我可以看到参数是这样传递给控制器​​的:

Started POST "/en/publications" for 127.0.0.1 at Thu May 26 16:17:25 +0200 2011
  Processing by PublicationsController#create as HTML
  Parameters: {"commit"=>"Create Publication", "authenticity_token"=>"vny2UjREsnQLZkUjH3zNxC8Cz5tvG/sAcllyjzZ+PWo=", "utf8"=>"\342\234\223", "publication"=>{"attachment"=>#<ActionDispatch::Http::UploadedFile:0x106d660a8 @headers="Content-Disposition: form-data; name=\"publication[attachment]\"; filename=\"photo.jpg\"\r\nContent-Type: image/jpeg\r\n", @content_type="image/jpeg", @original_filename="photo.jpg", @tempfile=#<File:/var/folders/yX/yXe3dRdgGO8II-+SWIzLRE+++TI/-Tmp-/RackMultipart20110526-35653-1sr4hnw-0>>, "text"=>"asd", "subject"=>"asd", "full_name"=>"asd", "email"=>"asd@lol.com"}, "locale"=>"en"}

型号:

class Publication < ActiveRecord::Base
  mount_uploader :attachment, PublicationUploader

  validates :subject, 
            :presence => true
  validates :text, 
            :presence => true
  validates :full_name, 
            :presence => true
  validates :email, 
            :presence => true,
            :email => { :if => 'email.present?' }
  # validates :attachment, 
  #           :integrity => true,
  #           :processing => true
end

上传器类(默认):

class PublicationUploader < CarrierWave::Uploader::Base

  # Include RMagick or ImageScience support:
  # include CarrierWave::RMagick
  # include CarrierWave::ImageScience

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :s3

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Provide a default URL as a default if there hasn't been a file uploaded:
  # def default_url
  #   "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  # end

  # Process files as they are uploaded:
  # process :scale => [200, 300]
  #
  # def scale(width, height)
  #   # do something
  # end

  # Create different versions of your uploaded files:
  # version :thumb do
  #   process :scale => [50, 50]
  # end

  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  def extension_white_list
    %w(jpg jpeg gif png pdf doc txt)
  end

  # Override the filename of the uploaded files:
  # def filename
  #   "something.jpg" if original_filename
  # end

end

宝石文件

source 'http://rubygems.org'

gem 'rails', '3.0.7'
gem "hirb"
gem "haml"
gem "compass"
gem "asset_tags"
gem "js_erb"
gem "jammit"
gem 'cat_router', '>=0.2.0'
gem 'devise'
gem 'i18n_routing'
gem 'simple_form', '>=1.4'
gem 'carmen'
gem 'carrierwave', '>=0.5.4'

group :development, :test do
  gem 'sqlite3'
  gem 'capistrano'
  gem "win32-open3", :platforms => :mswin
  gem 'seed-fu'
end
group :staging, :production do
  gem 'mysql'
end

帮助?

【问题讨论】:

  • 表单中的 :multipart => true 怎么样?
  • 我拥有所有这些(就像在教程中一样)。
  • 你能在这里打印表单中传递的参数吗?
  • 我用
    更新了我的问题
  • 请打印发送给控制器的实际参数,好像表格没问题

标签: ruby-on-rails ruby-on-rails-3 carrierwave


【解决方案1】:

rails 控制台中的以下代码返回什么:

Publication.create!(:attachment => File.new("test.jpg"))

是否创建出版物并存储附件?当然,您必须在 rails 文件夹中有“test.jpg”文件。

【讨论】:

  • 对此+1。您的其他验证要求是否得到满足?添加!如果存在验证问题,to create 将引发异常,而不是默默地回滚。
【解决方案2】:

在您的 PublicationUploader 模型中添加 include CarrierWave::RMagick 字符串

【讨论】:

  • 哼...为什么?我不使用任何类似的功能(上传pdf,jpg等文件,不处理)
  • 好的...我做了,但没有帮助。
  • 嗯……我实在看不懂
  • 似乎你做了所有像 railscast 一样的事情
  • 这是不需要的,因为他在上传时不做任何图像处理(调整大小等)。
猜你喜欢
  • 2012-04-28
  • 2012-07-20
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2012-03-16
  • 2015-06-08
相关资源
最近更新 更多