এটি "রেলের সাথে আপলোড করা" সিরিজের আরেকটি নিবন্ধ। আজ আমরা Carrierwave-এর সাথে দেখা করতে যাচ্ছি - Rails-এর জন্য সবচেয়ে জনপ্রিয় ফাইল আপলোডিং সমাধানগুলির মধ্যে একটি। আমি Carrierwave পছন্দ করি কারণ এটি শুরু করা সহজ, এতে অনেকগুলি বৈশিষ্ট্য রয়েছে বাক্সের বাইরে, এবং এটি সম্প্রদায়ের সদস্যদের দ্বারা লিখিত কয়েক ডজন "কিভাবে করবেন" নিবন্ধ সরবরাহ করে, তাই আপনি হারিয়ে যাবেন না৷
এই নিবন্ধে, আপনি শিখবেন কিভাবে:
- আপনার Rails অ্যাপে Carrierwave ইন্টিগ্রেট করুন
- বৈধতা যোগ করুন
- অনুরোধ জুড়ে ফাইলগুলি বজায় রাখুন
- ফাইলগুলি সরান
- থাম্বনেল তৈরি করুন
- দূরবর্তী অবস্থান থেকে ফাইল আপলোড করুন
- একাধিক ফাইল আপলোড প্রবর্তন করুন
- ক্লাউড স্টোরেজের জন্য সমর্থন যোগ করুন
এই নিবন্ধের উৎস কোড GitHub এ উপলব্ধ। পড়া উপভোগ করুন!
ভিত্তি স্থাপন
বরাবরের মতো, একটি নতুন রেল অ্যাপ্লিকেশন তৈরি করে শুরু করুন:
rails new UploadingWithCarrierwave -T
এই ডেমোর জন্য আমি Rails 5.0.2 ব্যবহার করব। অনুগ্রহ করে মনে রাখবেন যে Carrierwave 1 শুধুমাত্র Rails 4+ এবং Ruby 2 সমর্থন করে। আপনি যদি এখনও Rails 3-এ রাইড করেন, তাহলে Carrierwave সংস্করণ 0.11 হুক করুন।
Carrierwave কার্যকরী দেখতে, আমরা একটি একমাত্র Post
সহ একটি খুব সাধারণ ব্লগিং অ্যাপ্লিকেশন তৈরি করতে যাচ্ছি মডেল. এটিতে নিম্নলিখিত প্রধান বৈশিষ্ট্যগুলি থাকবে:
title
(string
)body
(text
)image
(string
)—এই ক্ষেত্রটিতে পোস্টের সাথে সংযুক্ত একটি ছবি (একটি ফাইলের নাম, সুনির্দিষ্টভাবে) থাকবে
একটি নতুন মাইগ্রেশন তৈরি এবং প্রয়োগ করুন:
rails g model Post title:string body:text image:string rails db:migrate
কিছু রুট সেট আপ করুন:
config/routes.rb
resources :posts root to: 'posts#index'
এছাড়াও, একটি খুব মৌলিক নিয়ামক তৈরি করুন:
posts_controller.rb
class PostsController < ApplicationController before_action :set_post, only: [:show, :edit, :update] def index @posts = Post.order('created_at DESC') end def show end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to posts_path else render :new end end def edit end def update if @post.update_attributes(post_params) redirect_to post_path(@post) else render :edit end end private def post_params params.require(:post).permit(:title, :body, :image) end def set_post @post = Post.find(params[:id]) end end
এখন সূচী তৈরি করা যাক দেখুন:
views/posts/index.html.erb
<h1>Posts</h1> <%= link_to 'Add post', new_post_path %> <%= render @posts %>
এবং সংশ্লিষ্ট আংশিক:
views/posts/_post.html.erb
<h2><%= link_to post.title, post_path(post) %></h2> <p><%= truncate(post.body, length: 150) %></p> <p><%= link_to 'Edit', edit_post_path(post) %></p> <hr>
এখানে আমি Rails truncate
ব্যবহার করছি পোস্ট থেকে শুধুমাত্র প্রথম 150টি চিহ্ন প্রদর্শন করার পদ্ধতি। আমরা অন্যান্য ভিউ এবং আংশিক ফর্ম তৈরি করার আগে, আসুন প্রথমে ক্যারিয়ারওয়েভকে অ্যাপ্লিকেশনটিতে একীভূত করি৷
ক্যারিয়ারওয়েভ সংহত করা
Gemfile এ একটি নতুন রত্ন ড্রপ করুন৷ :
জেমফাইল
gem 'carrierwave', '~> 1.0'
চালান:
bundle install
Carrierwave তার কনফিগারেশন আপলোডারদের ভিতরে সঞ্চয় করে যে আপনার মডেল অন্তর্ভুক্ত করা হয়. একটি আপলোডার তৈরি করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
rails generate uploader Image
এখন, অ্যাপ/আপলোডারদের ভিতরে , আপনি image_uploader.rb নামে একটি নতুন ফাইল পাবেন৷ . মনে রাখবেন এতে কিছু দরকারী মন্তব্য এবং উদাহরণ রয়েছে, তাই আপনি এটি শুরু করতে ব্যবহার করতে পারেন। এই ডেমোতে আমরা ActiveRecord ব্যবহার করব, তবে Carrierwave-এ Mongoid, Sequel, এবং DataMapper-এর জন্যও সমর্থন রয়েছে৷
এর পরে, আমাদের অন্তর্ভুক্ত করতে হবে বা মাউন্ট এই মডেলটিতে আপলোডার:
models/post.rb
mount_uploader :image, ImageUploader
আপলোডারের ইতিমধ্যেই বুদ্ধিমান ডিফল্ট সেটিংস রয়েছে, তবে আপলোড করা ফাইলগুলি কোথায় সংরক্ষণ করা হবে তা আমাদের চয়ন করতে হবে। আপাতত, আসুন ফাইল স্টোরেজ নিয়োগ করি:
uploaders/image_uploader.rb
storage :file
ডিফল্টরূপে, ফাইলগুলি পাবলিক/আপলোড-এর ভিতরে রাখা হবে৷ ডিরেক্টরি, তাই এটি সংস্করণ নিয়ন্ত্রণ সিস্টেম থেকে বাদ দেওয়া ভাল:
.gitignore
public/uploads
এছাড়াও আপনি store_dir
পরিবর্তন করতে পারেন আপনার আপলোডারের ভিতরে অন্য কোন অবস্থান বেছে নেওয়ার পদ্ধতি।
এই মুহুর্তে, আমরা ফাইল আপলোড শুরু করার জন্য একটি নতুন ভিউ এবং একটি আংশিক ফর্ম তৈরি করতে পারি:
views/posts/new.html.erb
<h1>Add post</h1> <%= render 'form', post: @post %>
views/posts/_form.html.erb
<%= form_for post do |f| %> <div> <%= f.label :title %> <%= f.text_field :title %> </div> <div> <%= f.label :body %> <%= f.text_area :body %> </div> <div> <%= f.label :image %> <%= f.file_field :image %> </div> <%= f.submit %> <% end %>
মনে রাখবেন যে PostsController
আমরা ইতিমধ্যেই image
-এর অনুমতি দিয়েছি বলে সংশোধন করার প্রয়োজন নেই বৈশিষ্ট্য।
অবশেষে, সম্পাদনা দৃশ্য তৈরি করুন:
views/posts/edit.html.erb
<h1>Edit post</h1> <%= render 'form', post: @post %>
এটাই! আপনি সার্ভার বুট করতে পারেন এবং একটি চিত্র সহ একটি পোস্ট তৈরি করার চেষ্টা করতে পারেন। সমস্যা হল এই ছবিটি কোথাও দৃশ্যমান নয়, তাই আসুন পরবর্তী বিভাগে এগিয়ে যাই এবং একটি শো পৃষ্ঠা যোগ করি!
ছবি প্রদর্শন করা হচ্ছে
সুতরাং, একমাত্র দৃশ্য যা আমরা এখনও তৈরি করিনি তা হল শো . এখন এটি যোগ করুন:
views/posts/show.html.erb
<%= link_to 'All posts', posts_path %> <h1><%= @post.title %></h1> <%= image_tag(@post.image.url, alt: 'Image') if @post.image? %> <p><%= @post.body %></p> <p><%= link_to 'Edit', edit_post_path(@post) %></p>
আপনি দেখতে পাচ্ছেন, একটি সংযুক্তি প্রদর্শন করা সত্যিই সহজ:আপনাকে যা করতে হবে তা হল @post.image.url
একটি ছবির URL ধরতে। ফাইলের পাথ পেতে, current_path
ব্যবহার করুন পদ্ধতি উল্লেখ্য যে Carrierwave একটি image?
প্রদান করে একটি সংযুক্তি আদৌ উপস্থিত আছে কিনা তা পরীক্ষা করার জন্য আমাদের পদ্ধতি (image
পদ্ধতি নিজেই nil
ফেরত দেবে না , ফাইলটি উপস্থিত না থাকলেও)।
এখন, একটি পোস্টে নেভিগেট করার পরে, আপনি একটি চিত্র দেখতে পাবেন, তবে এটি খুব বড় দেখাতে পারে:সর্বোপরি, আমরা কোথাও মাত্রা সীমাবদ্ধ করছি না। অবশ্যই, আমরা কিছু CSS নিয়মের সাথে চিত্রটিকে ছোট করতে পারতাম, তবে ফাইলটি আপলোড হওয়ার পরে একটি থাম্বনেইল তৈরি করা আরও ভাল। তবে এর জন্য কিছু অতিরিক্ত পদক্ষেপের প্রয়োজন।
থাম্বনেল তৈরি করা হচ্ছে
ছবি ক্রপ এবং স্কেল করার জন্য, আমাদের একটি পৃথক টুল প্রয়োজন। বাক্সের বাইরে Carrierwave-এ RMagick এবং MiniMagick রত্নগুলির জন্য সমর্থন রয়েছে যেগুলি, পরিবর্তে, ImageMagick-এর সাহায্যে ছবিগুলি পরিচালনা করতে ব্যবহৃত হয়৷ ImageMagick হল একটি ওপেন সোর্স সমাধান যা আপনাকে বিদ্যমান চিত্রগুলি সম্পাদনা করতে এবং নতুনগুলি তৈরি করতে দেয়, তাই এগিয়ে যাওয়ার আগে আপনাকে এটি ডাউনলোড এবং ইনস্টল করতে হবে। এর পরে, আপনি দুটি রত্নগুলির মধ্যে যে কোনও একটি বেছে নিতে পারবেন। আমি মিনিম্যাজিকের সাথে থাকব, কারণ এটি ইনস্টল করা অনেক সহজ এবং এটির আরও ভাল সমর্থন রয়েছে:
জেমফাইল
gem 'mini_magick'
চালান:
bundle install
তারপর আপনার আপলোডারে MiniMagick অন্তর্ভুক্ত করুন:
uploaders/image_uploader.rb
include CarrierWave::MiniMagick
এখন আমাদের আপলোডারে একটি নতুন সংস্করণ চালু করতে হবে। সংস্করণ এর ধারণা (বা শৈলী) অনেক ফাইল আপলোডিং লাইব্রেরিতে ব্যবহৃত হয়; এর সহজ অর্থ হল মূল সংযুক্তির উপর ভিত্তি করে অতিরিক্ত ফাইল তৈরি করা হবে, উদাহরণস্বরূপ, বিভিন্ন মাত্রা বা বিন্যাস। thumb
নামে একটি নতুন সংস্করণ প্রবর্তন করুন৷ :
uploaders/image_uploader.rb
version :thumb do process resize_to_fill: [350, 350] end
আপনার পছন্দ অনুযায়ী অনেকগুলি সংস্করণ থাকতে পারে এবং আরও কী, সংস্করণগুলি এমনকি অন্যান্য সংস্করণগুলির উপরেও তৈরি করা যেতে পারে:
uploaders/image_uploader.rb
version :small_thumb, from_version: :thumb do process resize_to_fill: [20, 20] end
আপনি যদি ইতিমধ্যে কিছু ছবি আপলোড করে থাকেন, তাহলে তাদের থাম্বনেইল পাওয়া যাবে না। এটি একটি সমস্যা নয়, যদিও, আপনি সেগুলিকে রেল কনসোল থেকে পুনরায় তৈরি করতে পারেন:
rails c Post.find_each {|post| post.image.recreate_versions!(:thumb) if post.image?}
সবশেষে, মূল ছবির একটি লিঙ্ক সহ আপনার থাম্বনেইল প্রদর্শন করুন:
views/posts/show.html.erb
<%= link_to(image_tag(@post.image.thumb.url, alt: 'Image'), @post.image.url, target: '_blank') if @post.image? %>
সার্ভার বুট করুন এবং ফলাফল পর্যবেক্ষণ করুন!
বৈধতা যোগ করা হচ্ছে
বর্তমানে আমাদের আপলোড কাজ করে, কিন্তু আমরা ব্যবহারকারীর ইনপুটকে একেবারেই যাচাই করছি না, যা অবশ্যই খারাপ। যতক্ষণ না আমরা শুধুমাত্র ছবি নিয়ে কাজ করতে চাই, আসুন .png, .jpg এবং .gif এক্সটেনশনগুলিকে হোয়াইটলিস্ট করি:
uploaders/image_uploader.rb
def extension_whitelist %w(jpg jpeg gif png) end
আপনি একটি content_type_whitelist
সংজ্ঞায়িত করে বিষয়বস্তুর প্রকার পরীক্ষাও যোগ করতে পারেন পদ্ধতি:
uploaders/image_uploader.rb
def content_type_whitelist /image\// end
বিকল্পভাবে, content_type_blacklist
সংজ্ঞায়িত করে কিছু ফাইলের ধরন, যেমন এক্সিকিউটেবল, কালো তালিকাভুক্ত করা সম্ভব। পদ্ধতি।
একটি ফাইলের ধরন এবং এক্সটেনশন চেক করা ছাড়াও, আসুন এটিকে 1 মেগাবাইটের কম হওয়ার জন্য প্রয়োগ করি। এটি করার জন্য, আমাদের ActiveModel-এর জন্য একটি অতিরিক্ত রত্ন সমর্থনকারী ফাইল যাচাইকরণের প্রয়োজন হবে:
জেমফাইল
gem 'file_validators'
এটি ইনস্টল করুন:
bundle install
এখন কাঙ্খিত বৈধতা প্রবর্তন করুন (মনে রাখবেন যে আমি title
-এর জন্য চেকও যোগ করছি এবং body
গুণাবলী):
models/post.rb
validates :title, presence: true, length: {minimum: 2} validates :body, presence: true validates :image, file_size: { less_than: 1.megabytes }
পরবর্তী কাজটি হল ক্যারিয়ারওয়েভের ত্রুটি বার্তাগুলির জন্য I18n অনুবাদ যোগ করা:
config/locales/en.yml
en: errors: messages: carrierwave_processing_error: "Cannot resize image." carrierwave_integrity_error: "Not an image." carrierwave_download_error: "Couldn't download image." extension_whitelist_error: "You are not allowed to upload %{extension} files, allowed types: %{allowed_types}" extension_blacklist_error: "You are not allowed to upload %{extension} files, prohibited types: %{prohibited_types}"
বর্তমানে, আমরা কোথাও বৈধতা ত্রুটি প্রদর্শন করি না, তাই আসুন একটি ভাগ করা আংশিক তৈরি করি:
views/shared/_errors.html.erb
<% if object.errors.any? %> <h3>Some errors were found:</h3> <ul> <% object.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> <% end %>
ফর্মের ভিতরে এই আংশিকটি নিয়োগ করুন:
views/posts/_form.html.erb
<%= render 'shared/errors', object: post %>
এখন কিছু অবৈধ ফাইল আপলোড করার চেষ্টা করুন এবং ফলাফলটি পর্যবেক্ষণ করুন। এটি কাজ করা উচিত, কিন্তু আপনি যদি একটি বৈধ ফাইল নির্বাচন করেন এবং শিরোনাম বা বডি পূরণ না করেন, তাহলে চেকগুলি এখনও ব্যর্থ হবে এবং একটি ত্রুটি প্রদর্শিত হবে৷ যাইহোক, ফাইল ক্ষেত্রটি সাফ করা হবে এবং ব্যবহারকারীকে আবার ছবিটি বেছে নিতে হবে, যা খুব সুবিধাজনক নয়। এটি ঠিক করার জন্য, আমাদের ফর্মটিতে আরেকটি ক্ষেত্র যোগ করতে হবে।
অনুরোধ জুড়ে ফাইলগুলি অব্যাহত রাখা
ফর্ম রিডিসপ্লে জুড়ে ফাইলগুলি স্থির রাখা আসলে বেশ সহজ। আপনাকে যা করতে হবে তা হল একটি নতুন লুকানো ক্ষেত্র যোগ করুন এবং এটিকে কন্ট্রোলারের ভিতরে অনুমতি দিন:
views/shared/_form.html.erb
<%= f.label :image %> <%= f.file_field :image %><br> <%= f.hidden_field :image_cache %>
posts_controller.rb
params.require(:post).permit(:title, :body, :image, :image_cache)
এখন image_cache
স্বয়ংক্রিয়ভাবে জনবহুল হবে এবং চিত্রটি হারিয়ে যাবে না। একটি থাম্বনেইল প্রদর্শন করাও সহায়ক হতে পারে যাতে ব্যবহারকারী বুঝতে পারে ছবিটি সফলভাবে প্রক্রিয়া করা হয়েছে:
views/shared/_form.html.erb
<% if post.image? %> <%= image_tag post.image.thumb.url %> <% end %>
ছবি অপসারণ
আরেকটি খুব সাধারণ বৈশিষ্ট্য হল একটি রেকর্ড সম্পাদনা করার সময় সংযুক্ত ফাইলগুলি সরানোর ক্ষমতা। Carrierwave এর সাথে, এই বৈশিষ্ট্যটি বাস্তবায়ন করা কোন সমস্যা নয়। ফর্মটিতে একটি নতুন চেকবক্স যোগ করুন:
views/shared/_form.html.erb
<% if post.image? %> <%= image_tag post.image.thumb.url %> <div> <%= label_tag :remove_image do %> Remove image <%= f.check_box :remove_image %> <% end %> </div> <% end %>
এবং remove_image
কে অনুমতি দিন বৈশিষ্ট্য:
posts_controller.rb
params.require(:post).permit(:title, :body, :image, :remove_image, :image_cache)
এটাই! একটি ছবি ম্যানুয়ালি সরাতে, remove_image!
ব্যবহার করুন পদ্ধতি:
@post.remove_image!
একটি দূরবর্তী অবস্থান থেকে আপলোড করা হচ্ছে
Carrierwave এছাড়াও বাক্সের বাইরে একটি দুর্দান্ত বৈশিষ্ট্য সরবরাহ করে:তাদের URL দ্বারা দূরবর্তী অবস্থান থেকে ফাইল আপলোড করার ক্ষমতা। একটি নতুন ক্ষেত্র যোগ করে এবং সংশ্লিষ্ট বৈশিষ্ট্যের অনুমতি দিয়ে এখন এই ক্ষমতাটি চালু করা যাক:
views/shared/_form.html.erb
<%= f.text_field :remote_image_url %> <small>Enter URL to an image</small>
posts_controller.rb
params.require(:post).permit(:title, :body, :image, :remove_image, :image_cache, :remote_image_url)
কিভাবে শীতল হয়? আপনাকে কোনো পরিবর্তন করতে হবে না, এবং আপনি এখনই এই বৈশিষ্ট্যটি পরীক্ষা করতে পারেন!
একাধিক আপলোডের সাথে কাজ করা
ধরুন আমরা আমাদের পোস্টে একাধিক সংযুক্তি উপলব্ধ করতে চাই। বর্তমান সেটআপের সাথে এটি সম্ভব নয়, তবে সৌভাগ্যবশত, Carrierwave যেমন একটি দৃশ্যকে সমর্থন করে। এই বৈশিষ্ট্যটি বাস্তবায়ন করার জন্য, আপনাকে একটি সিরিয়ালাইজড ক্ষেত্র (SQLite-এর জন্য) অথবা একটি JSON ক্ষেত্র (Postgres বা MySQL-এর জন্য) যোগ করতে হবে। আমি পরবর্তী বিকল্পটি পছন্দ করি, তাই এখন একটি নতুন ডাটাবেস অ্যাডাপ্টারে স্যুইচ করা যাক। Gemfile থেকে sqlite3 রত্নটি সরান এবং পরিবর্তে pg যোগ করুন:
জেমফাইল
gem 'pg'
এটি ইনস্টল করুন:
bundle install
এইভাবে ডাটাবেস কনফিগারেশন পরিবর্তন করুন:
config/database.yml
default: &default adapter: postgresql pool: 5 timeout: 5000 development: <<: *default database: upload_carrier_dev username: 'YOUR_USER' password: 'YOUR_PASSWORD' host: localhost
সংশ্লিষ্ট Postgres ডাটাবেস তৈরি করুন এবং তারপর মাইগ্রেশন তৈরি করুন এবং প্রয়োগ করুন:
rails g migration add_attachments_to_posts attachments:json rails db:migrate
আপনি যদি SQLite এর সাথে লেগে থাকতে পছন্দ করেন, Carrierwave এর ডকুমেন্টেশনে তালিকাভুক্ত নির্দেশাবলী অনুসরণ করুন।
এখন আপলোডারগুলি মাউন্ট করুন (বচন ফর্মটি নোট করুন!):
model/post.rb
mount_uploaders :attachments, ImageUploader
আমি সংযুক্তির জন্য একই আপলোডার ব্যবহার করছি, তবে অবশ্যই আপনি একটি ভিন্ন কনফিগারেশন সহ একটি নতুন তৈরি করতে পারেন৷
আপনার ফর্মে একাধিক ফাইল ক্ষেত্র যোগ করুন:
views/shared/_form.html.erb
<div> <%= f.label :attachments %> <%= f.file_field :attachments, multiple: true %> </div>
যতক্ষণ attachments
ক্ষেত্রের মধ্যে একটি অ্যারে থাকবে, এটি নিম্নলিখিত উপায়ে অনুমোদিত হওয়া উচিত:
posts_controller.rb
params.require(:post).permit(:title, :body, :image, :remove_image, :image_cache, :remote_image_url, attachments: [])
অবশেষে, আপনি পোস্টের সংযুক্তিগুলির উপর পুনরাবৃত্তি করতে পারেন এবং যথারীতি প্রদর্শন করতে পারেন:
views/shared/show.html.erb
<% if @post.attachments? %> <ul> <% @post.attachments.each do |attachment| %> <li><%= link_to(image_tag(attachment.thumb.url, alt: 'Image'), attachment.url, target: '_blank') %></li> <% end %> </ul> <% end %>
মনে রাখবেন যে প্রতিটি সংযুক্তিতে আমাদের ImageUploader
এ কনফিগার করা একটি থাম্বনেইল থাকবে . চমৎকার!
ক্লাউড স্টোরেজ ব্যবহার করা
ফাইল স্টোরেজের সাথে লেগে থাকা সবসময় সুবিধাজনক এবং/অথবা সম্ভব নয়, উদাহরণস্বরূপ, হেরোকুতে কাস্টম ফাইলগুলি সংরক্ষণ করা সম্ভব নয়। তাই আপনি জিজ্ঞাসা করতে পারেন কিভাবে Amazon S3 ক্লাউড স্টোরেজ দিয়ে Carrierwave কে বিয়ে করবেন? ওয়েল, যে হিসাবে একটি চমত্কার সহজ কাজ. এই বৈশিষ্ট্যটি বাস্তবায়নের জন্য ক্যারিয়ার ওয়েভ ফোগ-অস জেমের উপর নির্ভর করে:
জেমফাইল
gem "fog-aws"
এটি ইনস্টল করুন:
bundle install
আসুন Carrierwave-এর জন্য একটি ইনিশিয়ালাইজার তৈরি করি এবং বিশ্বব্যাপী ক্লাউড স্টোরেজ কনফিগার করি:
config/initializers/carrierwave.rb
CarrierWave.configure do |config| config.fog_provider = 'fog/aws' config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['S3_KEY'], aws_secret_access_key: ENV['S3_SECRET'], region: ENV['S3_REGION'], } config.fog_directory = ENV['S3_BUCKET'] end
আরও কিছু বিকল্প আছে, যেগুলো ডকুমেন্টেশনে পাওয়া যাবে।
আমি নিরাপদ উপায়ে পরিবেশের ভেরিয়েবল সেট করতে dotenv-rails রত্ন ব্যবহার করছি, কিন্তু আপনি অন্য কোনো বিকল্প বেছে নিতে পারেন। যাইহোক, নিশ্চিত করুন যে আপনার S3 কী জোড়া সর্বজনীনভাবে উপলব্ধ নয়, কারণ অন্যথায় যে কেউ আপনার বালতিতে কিছু আপলোড করতে পারে!
এরপর, storage :file
প্রতিস্থাপন করুন এর সাথে লাইন:
uploaders/image_uploader.rb
storage :fog
S3 ছাড়াও, Carrierwave Google Storage এবং Rackspace-এ আপলোড সমর্থন করে। এই পরিষেবাগুলিও সেট আপ করা সহজ৷
৷উপসংহার
এটা আজকের জন্য! আমরা Carrierwave এর সমস্ত প্রধান বৈশিষ্ট্যগুলি কভার করেছি এবং এখন আপনি এটি আপনার প্রকল্পগুলিতে ব্যবহার করা শুরু করতে পারেন৷ এটিতে কিছু অতিরিক্ত বিকল্প উপলব্ধ রয়েছে, তাই ডকুমেন্টেশন ব্রাউজ করুন৷
৷আপনি আটকে থাকলে, আপনার প্রশ্ন পোস্ট করতে দ্বিধা করবেন না। এছাড়াও, Carrierwave-এর উইকিতে উঁকি দেওয়া উপকারী হতে পারে, যা অনেক সাধারণ প্রশ্নের উত্তর দেওয়ার জন্য দরকারী "কিভাবে করতে হয়" নিবন্ধগুলি হোস্ট করে।
তাই আমার সাথে থাকার জন্য আমি আপনাকে ধন্যবাদ, এবং খুশি কোডিং!