【问题标题】:Rails paperclip image URL uploading not workingRails回形针图像URL上传不起作用
【发布时间】:2013-06-27 15:01:58
【问题描述】:

我正在尝试创建一些图片 url 上传。我的文件上传字段有效,但是当我提交 URL 时,它提交并呈现我的 indeks 页面,并且没有上传任何图像。

这是我的模型:

class Konkurrancer < ActiveRecord::Base

    has_attached_file :photo,
                      :url  => "/public/images/billeder/photo/:id/:basename.:extension",
                      :path => ":rails_root/public/images/billeder/photo/:id/:basename.:extension"

    has_attached_file :photo2,
                      :url  => "/public/images/billeder/photo2/:id/:basename.:extension",
                      :path => ":rails_root/public/images/billeder/photo2/:id/:basename.:extension"

      attr_accessor :photo_url, :photo_url2

      def photo_url=(url) 
        return if url.blank?
        self.photo = RemoteUpload.new(url)
      end

      def photo_url2=(url) 
        return if url.blank?
        self.photo2 = RemoteUpload.new(url)
      end
end

我的控制器:

    def new
        @konkurrancer = Konkurrancer.new
        if !params[:konkurrancer].nil? && !params[:konkurrancer][:photo_url].blank?
        # user entered a photo url, use the url
        @konkurrancer.photo_remote_url = params[:konkurrancer][:photo_remote_url]
        elsif !params[:konkurrancer].nil? && !params[:konkurrancer][:photo]
         # use file upload  
        @konkurrancer.photo = params[:konkurrancer][:photo]
    end

    if !params[:konkurrancer].nil? && !params[:konkurrancer][:photo_url_2].blank?
      # user entered a photo url, use the url
      @konkurrancer.photo_remote_url = params[:konkurrancer][:photo_remote_url_2]
    elsif !params[:konkurrancer].nil? && !params[:konkurrancer][:photo]
      # use file upload
      @konkurrancer.photo2 = params[:konkurrancer][:photo2]
    end

        respond_to do |format|
          format.html # new.html.erb
          format.xml  { render :xml => @konkurrancer }
        end
      end

  # POST /konkurrancers
      # POST /konkurrancers.xml
      def create
        @konkurrancer = Konkurrancer.new(params[:konkurrancer])

        respond_to do |format|
          if @konkurrancer.save
            format.html { redirect_to(:admin_konkurrancers, :notice => 'Konkurrancer was successfully created.') }
            format.xml  { render :xml => :admin_konkurrancers, :status => :created, :location => @konkurrancer }
          else
            format.html { render :action => "new" }
            format.xml  { render :xml => @konkurrancer.errors, :status => :unprocessable_entity }
          end
        end
      end

我的 remote_upload.rb:

require 'open-uri'

# Make it always write to tempfiles, never StringIO
OpenURI::Buffer.module_eval {
  remove_const :StringMax
  const_set :StringMax, 0
}

class RemoteUpload 

  attr_reader :original_filename, :attachment_data

  def initialize(url) 
    # read remote data
    @attachment_data    = open(url)

    # determine filename
    path = self.attachment_data.base_uri.path

    # we need this attribute for compatibility to paperclip etc.
    @original_filename = File.basename(path).downcase
  end

  # redirect method calls to uploaded file (like size etc.)
  def method_missing(symbol, *args)
    if self.attachment_data.respond_to? symbol
      self.attachment_data.send symbol, *args
    else
      super
    end
  end

end

我的看法:

<%= simple_form_for [:admin, @konkurrancer], :html => { :multipart => true } do |f| %>
    <%= f.input :name, :label => 'Titel', :style => 'width:500;' %>
    <%= f.label :upload_125x125 %>
    <%= f.file_field :photo, :label => '125x125', :style => 'width:250;' %>
    <%= f.input :photo_url, :label => 'URL 125x125', :style => 'width:250;' %>
    <%= f.label :upload_460x60 %>
    <%= f.file_field :photo2, :label => '460x58', :style => 'width:250;' %>
    <%= f.input :photo_url2, :label => 'URL 460x58', :style => 'width:250;' %>
    <%= f.button :submit, :value => 'Create konkurrence' %>
<% end %>

【问题讨论】:

  • 你有没有指出它应该出错的地方?通过快速扫描您的代码,我可以看到网址 "/public/images/billeder/photo/:id/:basename.:extension" 可能不正确。你不应该放弃/public 部分吗?
  • 该路由适用于文件字段上传。我不认为这是错误的回形针图像路线。我确实认为它与远程上传类有关

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


【解决方案1】:

我正在写一篇漂亮的回复,然后我发现有人已经写了同样的东西!!

给你:http://trevorturk.com/2008/12/11/easy-upload-via-url-with-paperclip/

这应该正是您正在寻找的。如果你绊倒了,请告诉我。

祝你好运

【讨论】:

【解决方案2】:

您似乎正在尝试访问与表单中的参数不匹配的参数:

@konkurrancer.photo_remote_url = params[:konkurrancer][:photo_remote_url]


<%= f.input :photo_url, :label => 'URL 125x125', :style => 'width:250;' %>

您应该在控制器中使用 :photo_url 而不是 :photo_remote_url 吗?

【讨论】:

  • 在无法运行代码的情况下很难调试,对不起!
  • @Rails 初学者 再看一遍,你能在控制器中混淆 new 和 create 方法吗?我认为 create 是在表单提交后获取信息的,因此设置远程上传的代码可能应该在 create 中,而不是 new。
  • 如果这没有帮助,请开始将puts 语句放入控制器方法中,以验证代码是否至少被您期望的输入调用。将有助于缩小范围。祝你好运!
猜你喜欢
  • 2016-03-31
  • 2019-02-22
  • 2017-05-24
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多