Olá, achei interessante o desafio e com algumas pesquisas fiz um breve projetinho com sua ideia.
// projeto proposto
mkdir save-image cd save-image npm init
// Prisma CLI
npm install -g prisma
// crie um arquivo 'schema.prisma' para as definições
datasource db {
provider = "sqlite"
url = "file:dev.db"
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
password String
image Bytes?
}
// para gerar o modelo do Prima baseado no arquivo 'schema.prisma'
npx prisma generate
// dependencias necessárias
npm install express cors @prisma/client sqlite3 npm install multer
// 'index.js' com instruções
const express = require('express');
const cors = require('cors');
const multer = require('multer');
const { PrismaClient, Prisma } = require('@prisma/client');
const prisma = new PrismaClient();
const app = express();
app.use(cors());
// adiciona users para teste
app.post('/users', async (req, res) => {
const newUser = await prisma.user.create({
data: {
id: 1,
name: 'John Doe',
email: '[email protected]',
password: 'password123',
},
});
res.json(newUser);
});
// retorna users
app.get('/users', async (req, res) => {
const users = await prisma.user.findMany();
res.json(users);
});
// remover users
app.delete('/users', async (req, res) => {
const users = await prisma.user.deleteMany();
res.json(users);
});
// Configuração do multer para salvar as imagens no diretório "uploads"
const storage = multer.diskStorage({
destination: './uploads',
filename: (req, file, cb) => {
cb(null, Date.now() + '-' + file.originalname);
}
});
const upload = multer({ storage });
// Rota para receber a imagem e salvar no banco de dados
app.post('/users/:id/image', upload.single('image'), async (req, res) => {
const { id } = req.params;
const { buffer } = req.file;
try {
const updatedUser = await prisma.user.update({
where: { id: Number(id) },
data: { image: buffer },
});
res.json(updatedUser);
} catch (error) {
console.error(error);
res.status(500).send('Erro ao atualizar o usuário.');
}
});
app.listen(3000, () => console.log('Servidor iniciado na porta 3000'));
// Execute o comando para gerar a tabela
npx prisma migrate dev
// Execute o comando para iniciar o projeto
npm start
Espero que ajude.