2017-05-14 5 views
0

Brauchen Sie bitte eine kleine Anleitung. stelle ich dieses ziemlich Vorgegeben mit AvatarUploader über carrierwaveuploader/carrierwave-mongoid und die Dateien speichern fein über GridfsCarrierwave Mongoid Image_tag

Das Problem ist, wenn ich ein image_tag ich die URL erhalten, die

wie http://some.domain.com/images/uploaded/users/avatar/:user_id/:file_name

sieht ich das Bild müssen sichtbar sein öffentlich Die Dokumente sagen Ihnen nicht wirklich, was zu tun ist.

Ich kann nicht auf diese Datei über HTTP für die image_tag zugreifen. Ich bekomme No route matches [GET] "/images/uploads/user/avatar/... Irgendwelche Ideen? Ich bin neu bei Carrierwave.

Rails 5.0.2, carrierwave (0.11.2), carrierwave-mongoid (0.10.0), mongoid (6.0.2)

Antwort

0

Nachdem keine Hilfe und mehr Forschung habe ich gefunden, was zu tun ist. Mit meinem image_url http://some.domain.com/images/uploaded/users/avatar/:user_id/:file_name

Sie müssen zuerst eine GridfsController dann erstellen Sie die Methoden für das Senden der Daten erstellen:

def avatar 
    @user = User.find(params[:id]) 
    content = @user.avatar.read 
    if stale?(etag: content, public: true) 
     send_data content, type: @user.avatar.file.content_type, disposition: "inline" 
     expires_in 0, public: true 
    end 
end 

def thumb_avatar 
    @user = User.find(params[:id]) 
    content = @user.avatar.tiny_thumb.read 
    if stale?(etag: content, public: true) 
     send_data content, type: @user.avatar.tiny_thumb.file.content_type, disposition: "inline" 
     expires_in 0, public: true 
    end 
end 

Dann konfigurieren Sie den grid_fs_access_url in initializers/carrierwave.rb (Sie werden wahrscheinlich die Datei erstellen haben)

CarrierWave.configure do |config| 
    config.grid_fs_access_url = "/images" 
end 

Dann müssen Sie die Routen erstellen

match '/images/uploads/user/avatar/:id/:filename' => 'gridfs#avatar', via: :get 
match '/images/uploads/user/avatar/:id/:filename' => 'gridfs#thumb_avatar', constraints: { filename: /thumb.*/ }, via: :get 

Jetzt können Sie auf das Bild mit der image_tag zugreifen. Sie können mehr Routen und GridfsController Methoden zu Ihren Bedürfnissen passen.