NodeJS File Upload (Dosya Yükleme)

Yasin DALKILIÇ
4 min readJan 27, 2021

--

Nodejs Dosya Yükleme

Herkese merhabalar bugun sizlerle beraber nodejs üzerinde multer paketini kullanarak sunucuya dosya yükleme işlemlerine bakıyor olacağız, uygulayacağımız küçük örnekte hem tek dosya hemde toplu dosya eklemeyi örneklendiriyor olacağız o zaman lafı fazla uzatmadan hemen başlayalım.

Proje Oluşturma;

npm init -y 
npm install --save express
npm install --save cors
npm install --save body-parser
npm install --save multer
npm install --save nodemon

diyerek boş bir proje oluşturup içerisine exprees,cors,body-parser,nodemon,ve multer paketimizi kuruyoruz.

Yapılandırma;

Paketlerimizi kurduktan sonra öncelikle package.json dosyama gelip script kısmına

"start": "nodemon server.js"

start komutunu ekliyorum ve ardından server.js dosyamı oluşturuyorum.

Server.js dosyama gelip aşağıdakileri ekliyorum ve serveri 5652 numaralı portta dinleyeceğini belirtip hemen ardından app.js dosyamı oluşturuyorum

const http = require('http');const app = require('./app')const server = http.createServer(app);server.listen(5652)//ServerJS

App.js dosyamı oluşturmadan önce singleFileUpload.js dosyamı oluşturuyorum.

const multer = require('multer')const storage = multer.diskStorage({destination: function(req, file, cb) {cb(null, 'uploads')},filename: function(req, file, cb) {const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)cb(null, file.fieldname + '-' + uniqueSuffix + "-" + file.originalname)}})const fileFilter = (req, file, cb) => {// if (file.mimetype == "image/png" || file.mimetype == "image/jpg" || file.mimetype == "image/jpeg") {//     cb(null, true)// } else {//     return cb(new Error('Dosya Türü Desteklenmiyor'), false);// }cb(null, true)}const upload = multer({ storage: storage, fileFilter: fileFilter }).single("file")module.exports = upload

öncelikle destinationımın uploads klasörü olacağını söylüyorum(Klasörü ben kendim elimle oluşturdum siz klasörün varlıgını kontrol edip eğer klasör yoksa bu klasörü oluştur diyebilirsiniz) daha sonra filename alanında unique(tekil) olacak şekilde bir dosya ismi oluşturuyorum siz dilerseniz (uuid) kullanabilirsiniz, daha sonra eğer isterseniz filteFilter diyerek dosya ile ilgili kontroller gerçekleştirilebilir örnek olması açısından resim dosyalarını destekleyen bir örnek bırakıp açıklama satırına aldım, ve ardından multer’a kullanacağı storage ve fileFilteri verip single olacağını (tek dosya yükleyeceğimizi) ve bunu api üzerinden gönderirken file adında göndereceğimizi belirtip export ediyoruz.

Şimdi App.js dosyamıza geçebiliriz

const express = require('express')const bodyParser = require('body-parser')const app = express();const path = require('path');const cors = require('cors')const singleFileUpload=require('./singleFileUpload')app.use(bodyParser.urlencoded({ extended: false }))app.use(bodyParser.json());app.use(cors());app.use('/uploads', express.static(path.join(__dirname, 'uploads')));app.post("/fileUpload",(req,res,next)=>{try {singleFileUpload(req, res, function(error) {if (error) {console.log("err",error)} else {res.json(req.file).status(200)}})} catch (error) {console.log("error",error)}})module.exports = app

App.js dosyamı ayarladıktan sonra npm start diyerek çalıştırıp Postman üzerinden bir istek atıyorum.

Single File Upload Api Cevabı
Uploads Klasörüne file yüklenmesi

görmüş oldugunuz gibi isteğimi gönderdikten sonra dosyamız uploads klasörüne yüklenip geriye file ile ilgili bilgileri gönderiyoruz.

Şimdi gelelim çoklu dosya yüklemeye;

Çoklu dosya yüklemek için ise multipleFileUpload.js adında bir dosya oluşturuyorum.

const multer = require('multer')const storage = multer.diskStorage({destination: function (req, file, cb) {cb(null, 'uploads/')},filename: function (req, file, cb) {const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)cb(null, file.fieldname + '-' + uniqueSuffix+ "-"+file.originalname)}})const fileFilter = (req, file, cb) => {// if (file.mimetype == "image/png" || file.mimetype == "image/jpg" || file.mimetype == "image/jpeg") {//     cb(null, true)// } else {//     return cb(new Error('Dosya Türü Desteklenmiyor'), false);// }cb(null, true)}const upload = multer({storage: storage, fileFilter: fileFilter}).array("files",10)module.exports = upload

ve singleFileUpload.js de yaptıklarımın aynısını yapıp bir farkla artık multer single değil array olacak diyorum sana gelecek olan api üzerindeki alan files olacak ve max 10 adet dosya kabul edeceksin dedikten sonra app.js dönüp yeni bir ekleme yapıyoruz.

const multipleUpload=require('./multipleFileUpload')app.post("/fileUploads",(req,res,next)=>{try {multipleUpload(req, res, function(error) {if (error) {console.log("err",error)} else {res.json(req.files).status(200)}})} catch (error) {console.log("error",error)}})

yeni end pointimizi tanımlayıp ardından Postman üzerinden test ediyoruz.

Multiple File Upload Api Cevabı
Uploads Klasörüne file yüklenmesi

Herkese İyi Çalışmalar Dilerim.

--

--

Yasin DALKILIÇ
Yasin DALKILIÇ

Written by Yasin DALKILIÇ

Hi, My name is Yasin I am a Software Developer, I love so much researching and development 😊 Here is my youtube channel @webciyasin

No responses yet