├── uploads └── .gitkeep ├── .gitignore ├── models └── Picture.js ├── app.js ├── routes └── picture.js ├── config └── multer.js ├── db.js ├── package.json └── controllers └── pictureController.js /uploads/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Dependency directories 12 | node_modules/ 13 | 14 | # Build files 15 | dist/ 16 | build/ 17 | 18 | # Environment variables 19 | .env -------------------------------------------------------------------------------- /models/Picture.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const Schema = mongoose.Schema; 3 | 4 | const PictureSchema = new Schema({ 5 | name: { type: String, required: true }, 6 | src: { type: String, required: true }, 7 | }); 8 | 9 | module.exports = mongoose.model("Picture", PictureSchema); 10 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | 4 | require("dotenv").config(); 5 | require("./db"); 6 | 7 | const port = process.env.PORT || 3000; 8 | 9 | const pictureRouter = require("./routes/picture"); 10 | 11 | app.use("/pictures", pictureRouter); 12 | 13 | app.listen(port, () => { 14 | console.log(`Server started on http://localhost:${port}`); 15 | }); 16 | -------------------------------------------------------------------------------- /routes/picture.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | const upload = require("../config/multer"); 4 | const PictureController = require("../controllers/pictureController"); 5 | 6 | router.post("/", upload.single("file"), PictureController.create); 7 | router.get("/", PictureController.findAll); 8 | router.delete("/:id", PictureController.remove); 9 | 10 | module.exports = router; 11 | -------------------------------------------------------------------------------- /config/multer.js: -------------------------------------------------------------------------------- 1 | const multer = require("multer"); 2 | 3 | const path = require("path"); 4 | 5 | const storage = multer.diskStorage({ 6 | destination: function (req, file, cb) { 7 | cb(null, "uploads/"); 8 | }, 9 | filename: function (req, file, cb) { 10 | cb(null, Date.now() + path.extname(file.originalname)); 11 | }, 12 | }); 13 | 14 | const upload = multer({ storage }); 15 | 16 | module.exports = upload; 17 | -------------------------------------------------------------------------------- /db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | 3 | require("dotenv").config(); 4 | 5 | mongoose.set("strictQuery", true); 6 | 7 | main().catch((err) => console.log(err)); 8 | 9 | async function main() { 10 | await mongoose.connect( 11 | `mongodb+srv://${process.env.DBUSER}:${process.env.DBPASS}@cluster0.rvt6uwq.mongodb.net/?retryWrites=true&w=majority` 12 | ); 13 | 14 | console.log("Conectado com sucesso!"); 15 | } 16 | 17 | module.exports = main; 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api_upload", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "nodemon ./app.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "dotenv": "^16.0.3", 15 | "express": "^4.18.2", 16 | "mongoose": "^6.8.4", 17 | "multer": "^1.4.5-lts.1" 18 | }, 19 | "devDependencies": { 20 | "nodemon": "^2.0.20" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /controllers/pictureController.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const Picture = require("../models/Picture"); 3 | 4 | exports.create = async (req, res) => { 5 | try { 6 | const { name } = req.body; 7 | 8 | const file = req.file; 9 | const picture = new Picture({ 10 | name, 11 | src: file.path, 12 | }); 13 | 14 | await picture.save(); 15 | res.json(picture); 16 | } catch (err) { 17 | res.status(500).json({ message: "Erro ao salvar a imagem." }); 18 | } 19 | }; 20 | 21 | exports.remove = async (req, res) => { 22 | try { 23 | const picture = await Picture.findById(req.params.id); 24 | if (!picture) { 25 | return res.status(404).json({ message: "Imagem não encontrada" }); 26 | } 27 | fs.unlinkSync(picture.src); 28 | await picture.remove(); 29 | res.json({ message: "Imagem removida com sucesso" }); 30 | } catch (err) { 31 | res.status(500).json({ message: "Erro ao remover a imagem" }); 32 | } 33 | }; 34 | 35 | exports.findAll = async (req, res) => { 36 | try { 37 | const pictures = await Picture.find(); 38 | res.json(pictures); 39 | } catch (err) { 40 | res.status(500).json({ message: "Erro ao buscar as imagens." }); 41 | } 42 | }; 43 | --------------------------------------------------------------------------------