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