Skip to content

Instantly share code, notes, and snippets.

@jrichardsz
Last active June 9, 2022 06:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jrichardsz/d2c22cc2caa0773cc8ee53c8ee69af2e to your computer and use it in GitHub Desktop.
Save jrichardsz/d2c22cc2caa0773cc8ee53c8ee69af2e to your computer and use it in GitHub Desktop.
upload http file snippets

server.js

var os = require('os');
var express = require('express');
const app = express();
var path = require('path')
var fs = require('fs')
var xssEscape = require('xss-escape');

const multer = require('multer');

var storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, os.tmpdir())
  },
  filename: function(req, file, cb) {
    var originalname = xssEscape(file.originalname);
    cb(null, originalname)
  }
})

const upload = multer({
  storage: storage
});

app.post('/upload', upload.single('file'), function(req, res) {
  const title = req.body.title;
  const file = req.file;

  console.log(title);
  console.log(file);
  console.log(file.originalname);

  res.send("Ok");
});

app.get('/list', function(req, res) {
  var files = fs.readdirSync(os.tmpdir(), {
      withFileTypes: true
    })
    .filter(item => !item.isDirectory())
    .map(item => item.name)
  res.json({"files":files});
});

app.listen(process.env.PORT || 5000, () => {
  console.log(`Server started...`);
});

package.json

{
  "name": "workspace",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.1",
    "multer": "^1.4.5-lts.1",
    "xss-escape": "0.0.6"
  }
}

https://www.twilio.com/blog/handle-file-uploads-node-express

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment