Rails ile file/image uploading

Rails ile file/image upload ederken neyi kullanmalıyız?
Veya file ve image upload işlemlerini farklı farklı mı ele almalıyız?
Active storage/Carrierwave/Shrine gibi yöntemleri görüyorum ama bunun standartları nedir?/ne olmalıdır? öğrenmek istiyorum.
Bilgi, birikim ve tecrübenizi paylaşırsanız çok mutlu olurum :slight_smile:

Rails için standart olan ActiveStorage. Yeni projelerde artık yüklü geliyor.

Veya file ve image upload işlemlerini farklı farklı mı ele almalıyız?

Omakase’nin güzel tarafı bu soruyu sormana gerek kalmaması. ActiveStorage’ın gözünde hepsi birer attachment (eklenti) ve senin belirlediğin alana yükleniyor.

Kısacası bir şeylere başlayacaksan veya sadece inceleyeceksen bile ilk tercihinin ActiveStorage olmasını tavsiye ederim.

1 Beğeni

Aslında kullanım amacına bağlı bir soru diye düşünüyorum. ActiveStorage kontrolsüz yüklemelere de izin veriyor(direct-upload) Her hangi bir file’ın her hangi bir yere bağlı olmasına gerek yok doğası gereği. Ben bu yönünü pek sevemedim açıkçası fakat yine de kullanıyorum. AS gelmeden önce paperclip ve carierwave kullanmıştım bazen neden carierwave kullanmıyorum diye kendime sormuyor değilim :slight_smile:

1 Beğeni

Özellikle olumsuz etkileyen bir durumla karşılaştın mı peki? Veya karşılaşmadıysan bile sevmeme kısmını kısacık bile olsa açabilir misin? :slight_smile:

1 Beğeni

Şöyle ki abi art niyetli kişilere aslında açık kapı bırakıyor. İstediğin kadar istediğin boyutta dosya gönder diyor. Kendi içinde bir validation setinin olmaması da lib’in sanki erken release olduğunu gösteriyor bana. Ben böyle kontrolsüz işleri sevmiyorum ya genel olarak :grinning_face_with_smiling_eyes:

2 Beğeni

Erken release’dan ziyade Basecamp’in kendi kullanımı için yeterli görmüş olmaları daha muhtemel geliyor bana.

Bir de active_storage_validations diye gem buldum. Baya da kullanılıyormuş. :slight_smile:

2 Beğeni

Tam ben yazacaktım @ogirginc

Contributorlardan biri tanıdık geldi :laughing:

image

Bu gem çok kullanışlı. ActiveStorage’da olmayan neredeyse tüm validationları ekliyor.

2 Beğeni

Evet abi AS kullanacaksan mecburen içeriye dahil etmen gerekiyor ama sıkıntı şu ki bu model’e attach ettiğin file’ları validate ediyor direct upload ne olacak? :slight_smile: Bu arada @sinankeskin yerelleştirme için teşekkürler :slight_smile:

2 Beğeni

Ben direct upload ile kullanıyorum. Sadece attach edilenleri validate etmiyor ki kanımca o zaman çok mantıksız olurdu. Örneğin dosya boyutu doğrulaması. Kullanıcı direct upload ile APIye gönderiyor bu validation sayesinde accept/reject ediyorum @m_dilmac

1 Beğeni

Şöyle ki validationlar model’e yazılıyor. Direct Upload ile yükleme yaptığın zaman her hangi bir modele veri bağlanmadan direkt oluşturuluyor bu durumda validation’lara girmiyor veri :slight_smile: Direct Upload ile yükleme yapıldıktan sonra ID pass ediliyor o sırada valdation’ı uyguluyordur. Öncesinde modele veri gelmediği için validation çalışamaz diye düşünüyorum :slight_smile:

1 Beğeni

Anladım. Direct upload varsayılan olarak public. Dediğin tabii ki doğru.

Ben örneğin CompanyImage adında bir modele bağlıyorum. Validationlar bu modelde çalışıyor tabii.

1 Beğeni

Aslında direct upload direkt olarak public, sadece sonrasında id’yi pass ederek yüklenen dosyanın o kayıt ile ilişkilendirilmesini sağlıyoruz. ActiveStorage Validations, ilişkilendirilen dosyanın üzerinde validasyonları çalıştırarak eğer valid ise error vermiyor değil ise error set ediyor. Buda şu anlama geliyor dosya aslında sunucuda ve veritabanına kaydedilmiş oluyor sadece record ile ilişkilendirilmiyor. Invalid bir obje bu sebeple record ile ilişkili gözükmese de sunucuda ve db’de yer almış oluyor :slight_smile:

1 Beğeni

Carrierwave daha mantıklı değil mi öyleyse? Her türlü imkanı sağlıyor ve db de sadece bağlı olduğu recordda path’i tutuyor .

Eğer basecamp mantığında kullanacaksan text editör’de resim ekleme, file ekleme gibi o zaman hayır ama modele ait resim atacaksan o zaman bence de carierwave daha mantıklı en azından bana öyle geliyor çünkü daha kontrollü.

1 Beğeni

Bence Rails varsayilaninda gelen araçlar dışında aşırı 3rd party tool ve araçlara yönlenmemekte fayda var. Biz uzun suredir ActiveStorage kullanıyoruz ve hiç yarı yolda bırakmadı.

Farklı servisleri desteklemesi, varyant yapısı, polimorfik bir veri tabanı ile kurgulanmış olması, direct upload işlevi, video veya PDF dosyaları için preview işlevleri sunması, kullanım kolaylığı gibi özellikleri bu aracın öne çıkan artılarıdır.

Bu konu özelinde benim tavsiyem bu varsayılan araçları kullanmanız yönündedir.

Sevgiler.

2 Beğeni