const express = require('express')
const cloudinary = require('cloudinary')
const path = require('path')
const multer = require('multer')
const upload = multer({ dest: 'uploads/' })
const app = express()
cloudinary.config({
cloud_name: 'my_cloud_name',
api_key: 'my_key',
api_secret: 'my_secret'
});
app.post('/profile', upload.single('avatar'), function (req, res, next) {
const imagePath = path.join(req.file.destination, req.file.filename); // req.file içinde direkt path de olabilir.
cloudinary.v2.uploader
.upload(imagePath)
.then(result=>console.log(result));
})
/*
Kaynaklar:
1. https://www.npmjs.com/package/multer
2. https://cloudinary.com/documentation/node_image_and_video_upload
*/
Tabii ki yapabilirsin. Cloudinary dokümantasyonu iyi. Çok rahat anlarsın.
Multer içinde bol bol örnek var.
Çok basit bir avatar yükleme endpointi;
JavaScript:const express = require('express') const cloudinary = require('cloudinary') const path = require('path') const multer = require('multer') const upload = multer({ dest: 'uploads/' }) const app = express() cloudinary.config({ cloud_name: 'my_cloud_name', api_key: 'my_key', api_secret: 'my_secret'. }); app.post('/profile', upload.single('avatar'), function (req, res, next) { const imagePath = path.join(req.file.destination, req.file.filename); // req.file içinde direkt path de olabilir. cloudinary.v2.uploader .upload(imagePath) .then(result=>console.log(result)); }) /* Kaynaklar: 1. https://www.npmjs.com/package/multer 2. https://cloudinary.com/documentation/node_image_and_video_upload */
Tabii ki yapabilirsin. Cloudinary dokümantasyonu iyi. Çok rahat anlarsın.
Multer içinde bol bol örnek var.
Çok basit bir avatar yükleme endpointi;
JavaScript:const express = require('express') const cloudinary = require('cloudinary') const path = require('path') const multer = require('multer') const upload = multer({ dest: 'uploads/' }) const app = express() cloudinary.config({ cloud_name: 'my_cloud_name', api_key: 'my_key', api_secret: 'my_secret'. }); app.post('/profile', upload.single('avatar'), function (req, res, next) { const imagePath = path.join(req.file.destination, req.file.filename); // req.file içinde direkt path de olabilir. cloudinary.v2.uploader .upload(imagePath) .then(result=>console.log(result)); }) /* Kaynaklar: 1. https://www.npmjs.com/package/multer 2. https://cloudinary.com/documentation/node_image_and_video_upload */
Tabiki ara paketler kullan. Ama asıl mantık yukarıda anlattığım gibi. multer içerisinde storage alan var. Gelen dosyayı nasıl tutacağını belirtiyorsun. Kendi storage yapını vs yapabilirsin. Ben ara paketten ziyade, senin direkt bahsettiğin ana paketleri nasıl bir arada kullanabilir çok basit şekilde gösterdim.Hocam bana biraz karışık geliyor bir de multer-Storage-cloudinary diye bir paket varmış işleri daha kolaylaştıriyormus bu yüklediğim dosyalar benim bilgisayarımda da tutulacak mı?
Senin söylediğin paketin kullanımına bak. Baya kolay hale getirmişler.Hocam daha basit bir yol falan yok mu direk sunucuya atmaya yarayan.
Hatırladığım kadarıyla multer paketinin sunduğu bir streamable yapı yok. Ya memory de tutarsın yada filesystemde. Ama multer'ın da altyapısı olan busboy paketi ile pipe edebiliyorsunuz.Bu islemi client -> cloud seklinde tek bir upload ile halledecek bir API sunuyor mu bu servis? Ya da direkt pipe stream edilebiliyor mu?
Kesinlikle hocam. Ama kullanım durumunu bilmediğimiz için, bu durum bilerekte seçilmiş olabiliyor. Preprocess etmek isteyebilir. Her şeyi main storage kısmına ve db ye yazmaya gerek yok. Ben bunu sık kullanıyorum. Resimlerde vs ön işlemler çok oluyor. Zip içerisinde beklediğim formatlar yada zip içerisinden tekrar zip yapıp (dosya-şifreleme) storage kısmına öyle yüklüyorum.Cunku bu durumda once backend'e ( ornekteki kodu yazan node backend ) dosya yukleniyor, yanilmiyorsam dosyanin komple upload edilmesi bekleniyor.
Client güvenilmez. Clientdan uzak backende yakın olsun bırakalım network-bandwith kullansın önemli değil. Server -> Server sonuçta.Client direct clould'a update edip bir token referansi ile gelse tek seferde halledilmis olur.
Yani hocam, süre tarafında genelde sorun olmuyor. Dosya boyutuna göre çok değişir ama genel olarak upload time sunucudan sunucuya hızlı oluyor. Ayrıca asenkron yapıyoruz çoğumuz. DB ye kaydedip adamın request karşılanmış oluyor çoktan.Ya da backend client upload ederken stream etse yine ~ tek upload suresinde halledilmis olur.
Kesinlikle hocam. Bu yüzden yüklenen dosya public alanda olmamalı. Kullanıcı url ile erişememeli ve diğer önlemler alınmalı.Bir de dosya yukleme isi guvenlik riski; tercihen backend file system e hic yuklemeden direkt stream edip kapatsak soketi o acidan da mantikli.
Client güvenilmez. Clientdan uzak backende yakın olsun bırakalım network-bandwith kullansın önemli değil. Server -> Server sonuçta.
x
olsun.x
token li dosyayi profil fotografim yapmak istiyorum diyor.x
i validate ediyor; gerekirse pre-process icin islemi yapiyor ama dosya yalnizca 1 defa upload edilmis oluyor boylecek.x
e bak, x
i bilmem ne yap vs gibi.Dediğiniz yöntem object-storage yapısı. Hocam sizin bu deneyimleriniz gerçekten çok takdire şayan.Onu soyle bir sey yapiyoruz biz, client'in dosya yukleyebilecegi bir public API var. Her dosya yuklemesi sonucunda token olusturuyoruz. Tokenx
olsun.
Sonra client, 2. bir API cagrisiyla gelip diyor kix
token li dosyayi profil fotografim yapmak istiyorum diyor.
Backend de gidipx
i validate ediyor; gerekirse pre-process icin islemi yapiyor ama dosya yalnizca 1 defa upload edilmis oluyor boylecek.
Eger client 2. bir API istegi atmazsa dosya kisa surede siliniyor. Dosya guvenlik dogrulamasi da tek bir merkezde yapilmis oluyor.
Bunun soyle bir avantaji da, uygulamada file upload kismini diger endpoint'lerde yapmamis oluyoruz, herkes birbirine dosya yerine dosyaya tekabul eden token i gonderiyor.x
e bak,x
i bilmem ne yap vs gibi.
Ama dedigin dogru tabi, server -> server cok daha guvenilir, public dosya yukleme API'inin sorumlulugu cok ciddi. O yuzden sordum aslinda bu cloud bilmem ne destekliyor mu diye, direkt ona yuklesin client benim backend e dosya gelmesin![]()
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.