我有初学者水平。我无法获得图像网址(我不知道如何)。 https://github.com/Atlantia/tinymce-rails-imageupload
1.Controller
class TinymceAssetsController < ApplicationController
def create
DataFile.save(params[:file])
render json: {
image: {
url: view_context.image_url(image)
}
end
}
2.型号
class DataFile < ActiveRecord::Base
def self.save(file)
name = file.original_filename
#create the file path
path = File.join(directory, name)
#write the file
File.open(path, "wb") { |f| f.write(file.read) }
end
end
文件已保存,但我不知道如何获取网址... 谢谢你的帮助。
我决定使用Paperclip。但是有一个问题。
class DataFile < ActiveRecord::Base
has_attached_file :file, styles: { medium: "300x300>", thumb: "100x100>" }
end
class TinymceAssetsController < ApplicationController
def create
@datafile.update_attributes(file: params[:file])
render json: {
image: {
url: @datafile.file.url(:medium)
}
}
end
end
NoMethodError(nil的未定义方法`update_attributes':NilClass)
和另一个问题: 如果我没有指出风格,图片会有原始尺寸吗?
答案 0 :(得分:1)
这是使用蜻蜓的解决方案..宝石'蜻蜓','0.9.12' https://github.com/markevans/dragonfly/
1.controller
class TinymceAssetsController < ApplicationController
def create
@image = StaticImage.new(:page_image => params[:file])
@image.save
render json: {
image: {
url: @image.page_image.url
}
}, content_type: "text/html"
end
end
2。模型
class StaticImage < ActiveRecord::Base
image_accessor :page_image
attr_accessible :page_image
end
答案 1 :(得分:0)
查看您链接的gem的来源,它似乎不会为您处理文件保存/处理,只是在TinyMCE中链接它。
我建议将宝石与Paperclip(https://github.com/thoughtbot/paperclip)
结合使用class Datafile < ActiveRecord::Base
has_attached_file :file, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
然后你可以将update_attributes中的文件对象传递给它:
@datafile.update_attributes(:file => params[:file])
并使用
在视图中调用它@datafile.file.url(:medium)
如果您想继续自己处理它,它会被保存到目录中的文件系统/来自用户的原始文件名...这可能会让您对注入攻击和错误的文件名开放!如果你自己生成它,你可以使用Dir类来查看文件系统中的正确文件名吗?
修改
好的,鉴于对问题的修改,这是你的控制器代码应该是什么样子:
class TinymceAssetsController < ApplicationController
def create
@datafile = DataFile.create(file: params[:file])
render json: {
image: {
url: @datafile.file.url(:medium)
}
}
end
end
在您的示例中,您没有实例化@datafile对象,因此它是零。您需要从数据库中提取DataFile,或者将其实例化。基本上,Paperclip抽象文件处理,因此它就像一个常规属性。您仍然需要在数据库等中创建它是属性的对象!
答案 2 :(得分:0)
我是通过以下方式做到的:
控制器:
# For uploading images frm TinyMCE
class TinymceAssetsController < ApplicationController
def create
# Take upload from params[:file] and store it somehow...
# Optionally also accept params[:hint] and consume if needed
image=Image.save(params[:file])
render json: {
image: {
url: view_context.image_url(image)
}
}, content_type: "text/html"
end
end
保存图像的模型
class Image
def self.save(file)
name = file.original_filename
#create the file path
write_path = File.join(Rails.root,'public','images','upload', name)
return_path = File.join('upload', name)
#write the file
File.open(write_path, "wb") { |f| f.write(file.read) }
return_path
end
end
将文件保存到public / images / upload并通过Tinymce正确插入正确的URL。