Monday, March 17, 2025

multer rename file express.js

 const multer = require('multer');

const path = require('path');


// Konfigurasi penyimpanan multer

const storage = multer.diskStorage({

  destination: (req, file, cb) => {

    cb(null, 'uploads/'); // Folder tujuan penyimpanan file

  },

  filename: (req, file, cb) => {

    // Mengganti nama file

    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);

    const fileExtension = path.extname(file.originalname); // Ambil ekstensi file asli

    const newFileName = `image-${uniqueSuffix}${fileExtension}`; // Nama file baru

    cb(null, newFileName);

  }

});


// Fungsi untuk memfilter tipe file

const fileFilter = (req, file, cb) => {

  // Tipe MIME yang diizinkan untuk gambar

  const allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];

  

  if (allowedTypes.includes(file.mimetype)) {

    // File diterima

    cb(null, true);

  } else {

    // File ditolak

    cb(new Error('Hanya file gambar (JPEG, PNG, GIF) yang diizinkan!'), false);

  }

};


// Inisialisasi multer dengan storage dan filter

const upload = multer({

  storage: storage,

  fileFilter: fileFilter,

  limits: { fileSize: 5 * 1024 * 1024 } // Opsional: batas ukuran file 5MB

});


// Endpoint untuk mengunggah file

app.post('/upload', upload.single('file'), (req, res) => {

  res.send('File gambar berhasil diunggah dengan nama baru!');

}, (err, req, res, next) => {

  // Penanganan error

  if (err instanceof multer.MulterError) {

    return res.status(400).send('Terjadi kesalahan saat mengunggah file: ' + err.message);

  } else if (err) {

    return res.status(400).send(err.message);

  }

  next();

});


// Jalankan server

app.listen(3000, () => {

  console.log('Server berjalan di port 3000');

});

No comments:

Post a Comment

Menjadi Programmer Bukan Hanya Tentang Coding, Tapi Tentang Mempermudah Kehidupan

Semenjak menjadi seorang programmer, ada satu cara pandang yang perlahan berubah dalam diri saya. Saya mulai berpikir bahwa ilmu pemrograman...