Ir al contenido principal

How to upload File with node and form data POST

 Hello, this is a simple project for testing my app in Android, but is very useful for work in other app. In this case is using for upload a CSV file, but is very simple change the type of file

This code is available on GitHub

Requirement:

  • Node JS >= 12 
  • Nodemon 
First the node app is created:
npm init (Change the main to app.js)
Second, install dependencie:

npm i ---save express
npm i ---save multer
npm i ---save cors
The magic or helper is multer, with this library we can upload different files. Express is a simple web server and the cors is to avoid problems.

Initialize all const for work
const multer = require('multer');
const express = require('express');
const cors = require('cors');
const path = require('path');
const fs = require('fs');
const app = express();
const port = 3000;
Now is necessary to create a folder for upload all CSV, in this case is called "uploads"
let uploads = __dirname + '/uploads';
if (!fs.existsSync(uploads)) {
    console.log('trying for create the directory "upload"');
    fs.mkdirSync(uploads);
}
The nextstep is create the function for storage, filter and initialize the multer:
global.__basedir = __dirname;

const storage = multer.diskStorage({
    destination: (req, file, callback) => {
        callback(null, __basedir + '/uploads/');
    },
    filename: (req, file, callback) => {
        callback(null, file.fieldname + "-" + Date.now() + "-" + file.originalname);
    }
});

const filterCSV = (req, file, callback) => {
    let ext = path.extname(file.originalname);
    if(ext === '.csv') {
        callback(null, true);
    } else {
        callback('File format is not a CSV', false);
    }
}

const upload = multer({
    storage: storage,
    fileFilter: filterCSV
});
For work with other type of file is necesary change the value on:
const filterCSV = (req, file, callback) => {
    let ext = path.extname(file.originalname);
    if(ext === '.csv') {
        callback(null, true);
    } else {
        callback('File format is not a CSV', false);
    }
}
for example, is necessary to evaluate ext == '.pdf' or another extension for work with your code. Rename the function to make it look better.

Then we all declare all function for work with express:
app.use(cors())

app.post('/upload/', upload.single('uploadFile'), (req, res) => {
    try{
        if(req.file == undefined) {
            res.status(400).send({
                message: "Please upload a CSV file: "
            });
        } else {
            res.status(200).send({
                message: "File Upload: "
            });
        }
    } catch(error) {
        res.status(500).send({
            message: "Could not upload the file: " + req.file.originalname
        });
    }
});

app.get('/upload/', (req, res) => {
    res.send("Hello from Node") ;
});


app.listen(port, '0.0.0.0', () => {
    console.log(`App listening port ${port}`);
});
On the line in the method POST is declare an argument for the callback "upload.single('uploadFile')", the "uploadFile" is the name of the input file.

Testing:

For run the app
nodemon dev or node app (for this case, if the app is crashed, is necessary back to run the app)


That's all folks

Comentarios

Entradas populares de este blog

Northwind para Mysql y otras

Supongamos que necesitamos una base de datos para comenzar a hacer pruebas y a la vez necesitamos que esa base de datos contenga mucha información con la cual trabajar. En mis tiempos de universidad existía una base de datos que utilizábamos en los laboratorios con SQL Server y c# para mostrar los datos en algún formulario. El nombre era Northwind. El problema es que era solo para SQL Server, pero alguien en se dio a la tarea de exportar esa base de datos a MySql y es justo lo que te vengo a mostrar acá. Hace un tiempo atrás clone de los repositorios de Google Code   esa información (que como algunos de ustedes sabrá dejara de estar al servicio de todos en un tiempo). Modifique un poco la DB de Mysql para que se pudiera ejecutar el script sin ningún problema. Lo interesante de todo esto es que puedes utilizar los demás script para diferentes gestores de base de datos Se advierte que para poder usarlas adecuadamente hay que modificar los campos de tipo longblob y qu...

How to upload File from form data POST in Android with Retrofit 2

 The last day I explain how to upload a simple CSV file using node . And now I teach how to upload from android device. Get source code here:  GitHub This article is write in java... later I'll add the method for kotlin. The logic is not changed, only the format code. 1) Is necessary add the dependencies in gradle: module implementation 'com.google.code.gson:gson:2.8.6' // RETROFIT // implementation 'com.squareup.retrofit2:retrofit:2.6.2' implementation 'com.squareup.retrofit2:converter-gson:2.6.2' implementation 'com.squareup.retrofit2:converter-scalars:2.5.0' 2) Add permissions in AndroidManifest.xml and modified the application for work with network security policy <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> in applitacion add ...

Instalacion de apk desde el adb (Linux y Windows)

Por lo general siempre instalamos nuestras aplicaciones por medio de algún gestor oh tienda de aplicaciones como el Google Play oh F-Droid por mencionar a algunos. Pero que pasa cuando no podemos acceder a esas tiendas y hemos modificado algunas cosas del sistema como por ejemplo la eliminación del teclado, por el simple hecho de que no nos gusta, oh a ver quitado el propio launcher del sistema, aunque suene ilógico hay personas que lo hacen (yo por ejemplo lo he hecho a modo de prueba en un Kiosera que tuve, ya que me pareció demasiado pesado y lelo el launcher y el teclado por defecto y llegue a una optimizacion del SO de un 100%). Quizás eso es lo mejor de Android, el completo control que este te da si eres root, sin mas preámbulo te muestro como instalar las apk por medio del ADB de Android. Pero antes de que los vea me gustaría aclarar que esto es aplicable tanto para dispositivos físicos como emuladores, en el caso de ser dispositivos físicos asegúrate de tener los dr...