ruby on rails - Using carrierwave to upload images to google cloud storage, the file name ends up being saved and not the public link to the image in the bucket -
i'm trying implement image upload google cloud storage rails 4.2 app using carrierwave gem. whenever go upload image uploaded bucket fine saved in db original image name e.g. image.png, not google cloud storage public link image e.g. https://storage.googleapis.com/project/bucket/image.png
not sure needed done here saving public link bucket , not file name.
carrierwave.rb file
carrierwave.configure |config| config.fog_credentials = { provider: 'google', google_storage_access_key_id: 'key', google_storage_secret_access_key: 'secret key' } config.fog_directory = 'bucket-name' end uploaders/check_item_value_image_uploader.rb
class checkitemvalueimageuploader < carrierwave::uploader::base # include rmagick or minimagick support: # include carrierwave::rmagick # include carrierwave::minimagick # choose kind of storage use uploader: #storage :file storage :fog # override directory uploaded files stored. # sensible default uploaders meant mounted: def store_dir "check-item-value-images/#{model.id}" end # add white list of extensions allowed uploaded. # images might use this: def extension_white_list %w(jpg jpeg gif png) end end related gems
gem 'gcloud' gem "fog" gem 'google-api-client', '~> 0.8.6' gem "mime-types" check_category_item_value model
mount_uploader :value, checkitemvalueimageuploader check_category_item_value update method
if @check_category_item_value.save flash[:success] = "successfully updated" redirect_to category_items_edit_path(@guide, @category, @category_item) else render 'category_items/edit' end edit form
<%= form_for(@check_category_item_value) |f| %> <%= f.file_field :value, :value => item_key.value, accept: "image/jpeg, image/jpg, image/gif, image/png" %> <%= f.submit "submit" %><hr> <% end %> the forms works fine value saved original image name not google cloud storage public link image.
i used carrierwave docs, this post, , this video google cloud platform have now. missing?
update
adding config.fog_public = true nothing
carrierwave.configure |config| config.fog_credentials = { provider: 'google', google_storage_access_key_id: 'key', google_storage_secret_access_key: 'secret key' } config.fog_public = true config.fog_directory = 'bucket-name' end
to set link public, please check config in config file:
# may set false config.fog_public = true for filename may overwrite in checkitemvalueimageuploader, here example:
class checkitemvalueimageuploader < carrierwave::uploader::base def filename "#{model.id}-#{original_filename}.#{file.extension}" if original_filename.present? end end
Comments
Post a Comment