روند اپلود تصاویر پروفایل

درود خدمت شما
من یک صفحه برای اضافه کردن کاربر و ویرایش اون انجام دادم که حالا می خوام یک فیلد درست به عنوان دریافت عکس پروفایل کاربر و نمایش دادن اون ولی تاحالا این کارو انجام ندادم

می خواستم بدونم آیا عکس اپلود می شه باید لینکشو در دیتابیس بگیرم و در هرجا می خوام نمایش بدم ؟
و اینکه آیا gem برای این کار هست که مثلا چیز خیلی خوبی رو تحویل بده ؟
یا کلا برای ساخت صفحه ثبت نام و login چیزی آماده یا gem چیزی وجود داره که شما خیلی ازش استفاده می کنید و کارتون سبک و زیبا بکنه یا خیر؟
با تشکر

paperclip

2 پسندیده

درود بر شما و تشکر از معرفی اگر امکانش هست به بنده در ( کمی در انجامش کمک بکنید )

من در پروژه ای که دارم یاد می گیرم و اشتراک می زارم
https://github.com/shahryarjb/uni

این موارد تا حدودی پیاده سازی کردم طبق آموزشش ولی ارور در این وسط به من می ده که من گوگل کردم چیز خاصی پیدا نکردم

فقط من اکتیو رکورد رو اسکیپ کردم بیشتر موارد داخل این آموزش بر اساس اکتیو رکورد هست

الان اروری که دارم به شرح زیر هست

اینپوت رو ارور می دونه

روند کار به این صورت انجام دادم

اول رفتم یک فیلد به جداول mongodb اضافه کردم به عنوان avatar در user.rb در مدلم و بعد رفتم داخل داکیومنت مونگو دیبی دیدم برای فایل هاش از BSON::Binary استفاده می کنه که به صورت زیر کدفیلد معرفی کردم

 field :avatar, type: BSON::Binary

بعد رفتم در داخل کنترلر user و به گزینه های درخوایت شده در آخر فایل

.permit(:avatar)

هم اضافه کردم و بعد از اون رفتم به فرمی که در اضافه کردن و ویرایش کردن ازش استفاده می کنم و پارشال کردم گزینه زیر رو اضافه کردم

<%= f.input :avatar %>

بعد دیدم ارور تمام صفحات سایتم می ده که گفتم احتمال اکتیو رکورد نیستم باید کتابخانه اون رو در مودلم درخواست کنم به شرح زیر

include Paperclip::Glue

بعد خیلی از ارور ها در همه صفحات رفت ولی الان می خوام به صفحه جدید یا ویرایش برم متاسفانه ارور بالا که عکس گزاشتم می ده

لذا توجه در فایل کانفیگ و اپلیکیشن rb در اون مسیر کد زیر رو هم اضافه کردم در اموزشش بود

config.paperclip_defaults = { storage: :fog, fog_credentials: { provider: "Local", local_root: "#{Rails.root}/public"}, fog_directory: "", fog_host: "localhost"}

کل کاری کردم این موارد بود که با ارور تو عکس بالا برخورد کردم لینک گیت هارو هم بالا قرار دادم اگر می خواستید کدو ببنید

من این خط زیر رو هم قرار دادم

<%= f.file_field :avatar %>

حالا ازم ارور زیر رو می گیره در صورتی که دقیقا کدی هست که توی اموزش هست و همینطور بخش ویرایش

بعد از عوض کردن نوع file_field تو مودلم اروری که بالا اومد با گزاشتن کد زیر در مدل ( نمی دونم امنیتی مشکل ساز هست یا خیر )

attr_accessor :avatar_file_name

مشکل ارور بالا حل شده الان ارور زیر رو می ده

ممنونم می شوم راهنمایی کنید با تشکر

از paperclip استفاده کن :
۱. 'gem 'paperclip', '~> 4.3' را به جم فایل اضافه کن
۲. rails generate paperclip user avatar را اجرا کنید (جای یوزر اسم مدل را بزار)
۳. این ۲ لاین رو به مدلت اضافه کن

  has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
  validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/

۴. یه فیلد از نوع فایل به فرمت اضافه کن مثلا

<%= f.file_field :avatar %>

۵. برای نمایش هم از کد زیر استفاده کن

<%= image_tag @users.avatar.url(:thumb) %>

اگر میخوای کانورت یا ریسایز کنی حتما باید imagemagick رو نصب کرده باشی ٫ اگر مک هستی میتونی با brew نصب کنی

اطلاعات بیشتر در paperclip

دوست عزیزم. تو اینجور موارد پیشنهاد می کنم که مستندات نرم افزار رو مطالعه کنی تا کنترل کامل داشته باشی به موضوع :wink:

درود دوست عزیز این کارو قبلا هم انجام دادم البته این مورد اکتیو رکورد ایجاد می کند و میگریشن می سازد که من از مونگو دیبی استفاده می کنم و هم اکتیو رکورد ندارم ( یعنی اسکیپ کردم ) هم اینکه میگریشن نداریم کامل در مودل نوشته می شه دیتابیس

ولی من تقریبا چنین فیلد های ساختم اگر به گیت هاپ من نگاه بکنید چنین چیز هایی هست و اون آموزش کاملشو چندین بار خوندم ولی متاسفانه ارور می ده

https://github.com/shahryarjb/uni

دوست عزیزم. تو اینجور موارد پیشنهاد می کنم که مستندات نرم افزار رو مطالعه کنی تا کنترل کامل داشته باشی به موضوع :wink:

واقعیت امر این هست که دوست من @lxsameer من چندین بار این داکیومنت مربوطه رو خوندم و حتی چندین مورد دیگه رو دیدم حتی فایل های دیگه ای رو هم دیدم از کامیت های مربوط به پروژه رو ببینید متوجه می شید چقدر فایل تغییر دادم اگر حل می شد حتما مزاحم شما نمی شدم !!
موارد این هست که من با انجام دادنش ( چه کامل یا چه ناقص ) متاسفانه نتونستم این مشکل رو تا الان حل کنمش

من حتی اگر می تونستم فایلی رو آپلود می کردم در مسیری و بعد از اون مثلا می اومدم لینکشو دیتابیس ذخیره می کردم بازم جای پیشرفت داشت که اونم نشد

باز اگر دوستان کمک بکنند ممنون می شم یک پروژه یادگیری هست و بنده نیز آماتور :wink:

1 پسندیده

دوستان منتظر لطف شما هستیم هم چنان این مشکل هرکاری کردم حل نشد نمی دونم کجا رو دارماشتباه می کنم

درود دوستان حل شد کد هارو کامیت کردم البته از این جم استفاده نکردم کلا فقط تونستم عکس رو اپلود کنم ولی اسمشو نتونستم بگیرم

درود خدمت دوستان وقتی فایل من اپلود می شه در دیتابیسم مسیر نمی تونم دریافت بکنم بجاش این موارد قرار می گیره

<ActionDispatch::Http::UploadedFile:0x007fcdd74ef9d8>

چطور می تونم آدرس فایل رو بگیرم ؟

درود تو کنترلرم آدرس یا بهتر بگم اسم فایل رو گرفتم به صورت زیر

@user.file_name = uploaded_io.original_filename
  @user.content_type = uploaded_io.content_type

بعد اسم هم تو بانک اطلاعاتی ذخیره شده بدون هیچ مشکل الان شکل اینجاست که من با کد زیر فراخوانی می کنم

<td> <img src='<%= "../profile/" + @user.file_name %>' > </td>

تصویر خوندم که آدرس تصویر شده :smiley:

http://localhost:3000/profile/IMG_20150507_023413.jpg

ولی ارور زیر می ده

No route matches [GET] "/profile/IMG_20150507_023413.jpg"

درود حل شد کد هارو کامیت کردم برای تازه وارد هایی مثل خودم