我正在尝试使用fancybox来显示图像。当我使用静态图像时,如资产文件夹中的现有,一切正常。但是,当我尝试使用使用carrierwave保存的上传图像时,它总是会显示下一条消息:"无法加载请求的内容。"。
我用来显示图片的代码是下一个:
应用/模型/ upload.rb
class Upload
include Mongoid::Document
include Mongoid::Timestamps
mount_uploader :file, UploadUploader
# Fields
field :file, type: String
field :filename, type: String
field :file64, type: String
field :size_file, type: Integer
field :file_extension, type: String
# Validations
validates_presence_of :file
# Hooks
before_validation do
if not self.file.url and self.filename and self.file64
sio = CarrierwaveStringIO.new( Base64.decode64( self.file64 ) )
sio.original_filename = self.filename
self.file = sio
self.filename = nil
self.file64 = nil
end
end
before_save do
self.size_file = self.size
self.file_extension = File.extname( self.file.to_s )[1..-1]
end
def base64
MIME::Types.type_of( self.file.url ).first.content_type
end
def size
self.file.size
end
end
应用/视图...
...
= link_to upload_path( upload.id ), class: 'fancybox' do
= image_tag upload_path( upload.id ), height: 174, width: 256
...
应用/资产/ JavaScript的...
...
$( ".fancybox" ).fancybox()
...
我已经尝试了很多东西来使代码工作。例如,在视图中,我更改了" href" link_tag和" src"的image_tag,到上传的显示路径,但它仍然无法正常工作。此外,我尝试使用AJAX加载图片并使用"内容" fancybox的属性,但我得到了相同的结果。最后,我为上传控制器创建了一个show动作,我只在其中显示图片并使用" content"和"键入" fancybox的属性使用html,但我看不到图片(没有路由与图片的url匹配,而不是show动作)。
我花了很多时间试图让它有效,但我找不到任何东西。提前谢谢。
修改
应用/控制器/ upload_controller.rb
class UploadsController < ApplicationController
load_and_authorize_resource
respond_to :html, :json
def show
if request.format.html?
content_type = MIME::Types.type_for( @upload.file.url ).first.content_type
send_file @upload.file.url, content_type: content_type, disposition: 'inline', :x_sendfile => true
else
respond_with @upload, api_template: :general
end
end
...
应用/上传/上传_...
class UploadUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"#{ Rails.root.to_s }/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def cache_dir
"#{ Rails.root.to_s }/tmp/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
def extension_white_list
%w(jpg jpeg png bmp tif)
end
end
应用/视图/上传/ show.html.haml
= image_tag @upload.file_url.to_s
答案 0 :(得分:1)
指定类型选项,强制内容类型。它可以设置为'image','ajax','iframe','swf'或'inline'
$( ".fancybox11" ).fancybox({
type: 'iframe', width: 380, height: 280
})
请参阅此链接fancybox api options。