【发布时间】:2015-12-14 14:39:59
【问题描述】:
我正在尝试允许用户通过远程 URL 上传图片。
我正常的选择文件图片上传工作正常。
我在提交 URL 上传的图像时收到回滚事务。
日志:
Started POST "/images" for 127.0.0.1 at 2015-09-16 23:33:52 -0600
Processing by ImagesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"rYIESJ0zLKaXx1ci+9utsZUxEEBs8rS5eanKvYoz4zoESAgqI8 AaPlyy00SlmStBJMYt4RRiAsv+v4ksuWGdeA==", "image"=>{"image_url"=>"http://bangalorefoodfete.com/wp-content/uploads/2015/09/food-61.jpg"}, "commit"=>"Submit Photo"}
(0.1ms) BEGIN
(0.2ms) ROLLBACK
(0.1ms) BEGIN
(0.3ms) ROLLBACK
Rendered images/new.html.erb within layouts/application (0.9ms)
Rendered layouts/_head.html.erb (7.3ms)
Rendered layouts/_navigation_links.html.erb (0.4ms)
Rendered layouts/_navigation.html.erb (1.3ms)
Rendered layouts/_messages.html.erb (0.1ms)
Completed 200 OK in 5398ms (Views: 48.2ms | ActiveRecord: 0.8ms)
编辑:
收到错误消息。
图片远程网址无效或无法访问
此通知摘自这里:
image.rb:
validates_presence_of :image_remote_url, :if => :image_url_provided?, :message => 'is invalid or inaccessible'
Image.rb:
require 'open-uri'
class Image < ActiveRecord::Base
has_attached_file :image,
:path => ":rails_root/public/system/:attachment/:id/:style/:filename",
:url => "/system/:attachment/:id/:style/:filename",
:styles => { :medium => "600x600>", :thumb => "100x100#" }
before_validation :download_remote_image, :if => :image_url_provided?
validates_attachment :image,
content_type: { content_type: ["image/jpeg", "image/jpg", "image/gif", "image/png"] }
validates_presence_of :image_remote_url, :if => :image_url_provided?, :message => 'is invalid or inaccessible'
private
def image_url_provided?
!self.image_url.blank?
end
def download_remote_image
io = open(URI.parse(image_url))
self.original_filename = io.base_uri.path.split('/').last
self.image = io
self.image_remote_url = image_url
rescue # catch url errors with validations instead of exceptions (Errno::ENOENT, OpenURI::HTTPError, etc...)
end
end
相关new.html.erb:
<%= form.text_field :image_url %><br>
images_controller.rb:
lass ImagesController < ApplicationController
before_action :find_image, only: [:show]
def new
@image = Image.new
end
def create
@image = Image.create( user_params )
if @image.save
redirect_to @image
else
render 'new'
end
end
def show
end
private
def user_params
params.require(:image).permit(:image, :title, :description, :image_remote_url, :image_url)
end
def find_image
@image = Image.find(params[:id])
end
end
相关架构.rb:
create_table "images", force: :cascade do |t|
t.string "title"
t.text "description"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.string "image_url"
t.string "image_remote_url"
end
我正在运行带有 Paperclip v4.3 的 Rails 4.2.4。
任何帮助将不胜感激。
解决方案:
在 models/image.rb 我改变了:
def download_remote_image
io = open(URI.parse(image_url))
self.original_filename = io.base_uri.path.split('/').last
self.image = io
self.image_remote_url = image_url
rescue
end
end
到这里:
def download_remote_image
io = open(URI.parse(image_url))
self.original_filename = io.base_uri.path.split('/').last
self.image = io
self.image_remote_url = image_url
end
end
我删除了救援,创建了一个迁移来将 original_filename 添加到我的图像表中,然后繁荣,问题解决了!
【问题讨论】:
-
您在这里遇到的问题是什么?
-
哇 抱歉,完全忘记添加问题了。基本上我在图像上获得回滚事务,它将上传,然后回滚,上传然后回滚,然后用missing.jpg而不是图像导航到显示操作
-
删除 download_remote_url 函数中的所有代码并仅添加一行 'self.image = open(image_url)' 并在最顶部写下这一行 require 'rest-open-uri'
-
无法加载此类文件 -- rest-open-uri
-
你需要安装这个gem才能使用它github.com/rfletcher/rest-open-uri
标签: ruby-on-rails ruby upload paperclip