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');

});

Saturday, March 8, 2025

Multipage PDF vanilla.js

 <!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>JSON to Multi-Page PDF with Table</title>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.8.2/jspdf.plugin.autotable.min.js"></script>

</head>

<body>

    <button onclick="generatePDF()">Generate PDF</button>


    <script>

        const { jsPDF } = window.jspdf;


        const jsonData = {

            employees: [

                { firstName: "John", lastName: "Doe", age: 30, role: "Developer" },

                { firstName: "Jane", lastName: "Smith", age: 25, role: "Designer" },

                { firstName: "Peter", lastName: "Jones", age: 35, role: "Manager" },

                { firstName: "Alice", lastName: "Brown", age: 28, role: "Analyst" },

                { firstName: "Bob", lastName: "Wilson", age: 40, role: "Engineer" },

                { firstName: "Carol", lastName: "Davis", age: 32, role: "Support" }

            ]

        };


        function generatePDF() {

            const doc = new jsPDF();


            // Define table columns

            const columns = [

                { header: "First Name", dataKey: "firstName" },

                { header: "Last Name", dataKey: "lastName" },

                { header: "Age", dataKey: "age" },

                { header: "Role", dataKey: "role" }

            ];


            // Add table with auto-pagination

            doc.autoTable({

                head: [columns.map(col => col.header)],

                body: jsonData.employees.map(employee => [

                    employee.firstName,

                    employee.lastName,

                    employee.age,

                    employee.role

                ]),

                startY: 20,

                theme: "grid",

                margin: { top: 10 }

            });


            // Save the PDF

            doc.save("employees_table.pdf");

        }

    </script>

</body>

</html>

Thursday, March 6, 2025

Generator Kata Sandi Kuat dengan Vanilla Javascript

 <!DOCTYPE html>

<html lang="id">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Generator Kata Sandi Kuat</title>

    <style>

        body {

            font-family: Arial, sans-serif;

            text-align: center;

            margin-top: 50px;

        }

        #passwordOutput {

            font-size: 20px;

            margin-top: 20px;

            padding: 10px;

            border: 1px solid #ccc;

            display: inline-block;

        }

        button {

            padding: 10px 20px;

            font-size: 16px;

            cursor: pointer;

        }

    </style>

</head>

<body>

    <h1>Generator Kata Sandi Kuat</h1>

    <button onclick="generatePassword()">Buat Kata Sandi</button>

    <div id="passwordOutput"></div>


    <script>

        function generatePassword() {

            // Karakter yang bisa digunakan dalam kata sandi

            const hurufKecil = 'abcdefghijklmnopqrstuvwxyz';

            const hurufBesar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

            const angka = '0123456789';

            const simbol = '!@#$%^&*()_+-=[]{}|;:,.<>?';

            const semuaKarakter = hurufKecil + hurufBesar + angka + simbol;


            // Panjang kata sandi (misalnya 12 karakter)

            const panjang = 12;

            let kataSandi = '';


            // Pastikan minimal 1 karakter dari setiap jenis

            kataSandi += hurufKecil[Math.floor(Math.random() * hurufKecil.length)];

            kataSandi += hurufBesar[Math.floor(Math.random() * hurufBesar.length)];

            kataSandi += angka[Math.floor(Math.random() * angka.length)];

            kataSandi += simbol[Math.floor(Math.random() * simbol.length)];


            // Tambahkan karakter acak sampai mencapai panjang yang diinginkan

            for (let i = kataSandi.length; i < panjang; i++) {

                kataSandi += semuaKarakter[Math.floor(Math.random() * semuaKarakter.length)];

            }


            // Acak ulang kata sandi agar posisi karakter lebih random

            kataSandi = kataSandi.split('').sort(() => Math.random() - 0.5).join('');


            // Tampilkan kata sandi di halaman

            document.getElementById('passwordOutput').innerText = kataSandi;

        }

    </script>

</body>

</html>

Wednesday, March 5, 2025

Refresh Div Elelment

 setInterval(function(){

  var refreshDiv = document.getElementById('#refresh'),

      request = XMLHttpRequest();

  

  request.open("GET", "myurl.html", false);

  request.send(null);

  

  var doc = document.implementation.createHTMLDocument("example");

  doc.documentElement.innerHTML = request.responseText;

  

  var refreshContent = doc.getElementById('#refresh').innerHTML;

  refreshDiv.innerHTML = refreshContent;

  

},5000);

Set Cookie dan Remove Cookie dengan php vanilla.js

< html lang = "en" > < head >     < meta charset = "UTF-8" >     < meta name = "viewport...