[
  {
    "path": ".gitignore",
    "content": "node_modules\n"
  },
  {
    "path": "README.md",
    "content": "# NodeUploads\n\nAn example of how to upload images locally with Node.js and Multer.\n\n### Version\n1.0.0\n\n## Usage\n\n### Installation\n\nInstall the dependencies\n\n```sh\n$ npm install\n```\n\n### Serve\nTo serve in the browser\n\n```sh\n$ npm start\n```\n\n## App Info\n\n### Author\n\nBrad Traversy\n[Traversy Media](http://www.traversymedia.com)\n\n### Version\n\n1.0.0\n\n### License\n\nThis project is licensed under the MIT License"
  },
  {
    "path": "app.js",
    "content": "const express = require('express');\nconst multer = require('multer');\nconst ejs = require('ejs');\nconst path = require('path');\n\n// Set The Storage Engine\nconst storage = multer.diskStorage({\n  destination: './public/uploads/',\n  filename: function(req, file, cb){\n    cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));\n  }\n});\n\n// Init Upload\nconst upload = multer({\n  storage: storage,\n  limits:{fileSize: 1000000},\n  fileFilter: function(req, file, cb){\n    checkFileType(file, cb);\n  }\n}).single('myImage');\n\n// Check File Type\nfunction checkFileType(file, cb){\n  // Allowed ext\n  const filetypes = /jpeg|jpg|png|gif/;\n  // Check ext\n  const extname = filetypes.test(path.extname(file.originalname).toLowerCase());\n  // Check mime\n  const mimetype = filetypes.test(file.mimetype);\n\n  if(mimetype && extname){\n    return cb(null,true);\n  } else {\n    cb('Error: Images Only!');\n  }\n}\n\n// Init app\nconst app = express();\n\n// EJS\napp.set('view engine', 'ejs');\n\n// Public Folder\napp.use(express.static('./public'));\n\napp.get('/', (req, res) => res.render('index'));\n\napp.post('/upload', (req, res) => {\n  upload(req, res, (err) => {\n    if(err){\n      res.render('index', {\n        msg: err\n      });\n    } else {\n      if(req.file == undefined){\n        res.render('index', {\n          msg: 'Error: No File Selected!'\n        });\n      } else {\n        res.render('index', {\n          msg: 'File Uploaded!',\n          file: `uploads/${req.file.filename}`\n        });\n      }\n    }\n  });\n});\n\nconst port = 3000;\n\napp.listen(port, () => console.log(`Server started on port ${port}`));"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"nodeuploads\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Example for image uploading in Node\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"start\": \"node app.js\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"ejs\": \"^2.5.7\",\n    \"express\": \"^4.16.2\",\n    \"multer\": \"^1.3.0\"\n  }\n}\n"
  },
  {
    "path": "views/index.ejs",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n  <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css\">\n  \n  <title>Node File Uploads</title>\n</head>\n<body>\n  <div class=\"container\">\n    <h1>File Upload</h1>\n    <%= typeof msg != 'undefined' ? msg : '' %>\n    <form action=\"/upload\" method=\"POST\" enctype=\"multipart/form-data\">\n      <div class=\"file-field input-field\">\n        <div class=\"btn grey\">\n          <span>File</span>\n          <input name=\"myImage\" type=\"file\">\n        </div>\n        <div class=\"file-path-wrapper\">\n          <input class=\"file-path validate\" type=\"text\">\n        </div>\n      </div>\n      <button type=\"submit\" class=\"btn\">Submit</button>\n    </form>\n    <br>\n    <img src=\"<%= typeof file != 'undefined' ? file : '' %>\" class=\"responsive-img\">\n  </div>\n\n  <script\n  src=\"https://code.jquery.com/jquery-3.2.1.min.js\"\n  integrity=\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\n  crossorigin=\"anonymous\"></script>\n  <script src=\"https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js\"></script>  \n</body>\n</html>"
  }
]