【发布时间】:2019-01-21 15:18:39
【问题描述】:
我是节点的新手,我遇到了一些麻烦。我在节点中使用 express,并尝试将图像作为 base64 上传到 sql DB 中的 blob。如果图片小于 50kb,则上传 else got
PayloadTooLargeError:请求实体太大。
我试过了:
error-request-entity-too-large
request-entity-too-large-how-to-increase-bodyparser-limit
没有什么对我有用,或者我做错了什么。有人能帮我吗?
代码:
crud.js(将方法转换为 vue2)
const app = new Vue({
el: "#main",
data:{
id_filme: 2,
titulo: "",
imagem: "",
lancamento: "",
avaliacao: ""
},
mounted(){
},
watch:{
},
computed:{
},
methods:{
getDados(){
},
editar(){
axios.post('/atualizar/'+ this.id_filme, {
id_filme: this.id_filme,
titulo: this.titulo,
imagem: this.imagem,
lancamento: this.lancamento,
avaliacao: this.avaliacao
})
.then(function (res) {
console.log(res);
})
.catch(function (error) {
// alert("Erro","Ocorreu um erro de servidor, entrar em contato com o analista responsável.","error")
alert("Erro")
console.error('falhou verifique a informação', error);
});
},
encodeImageFileAsURL() {
document.getElementById("capa").innerHTML = "";
var filesSelected = document.getElementById("imagem").files;
if (filesSelected.length > 0) {
var fileToLoad = filesSelected[0];
// console.log(fileToLoad)
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result; // <--- data: base64
var newImage = document.createElement('img');
newImage.src = srcData;
app.imagem = srcData
document.getElementById("capa").innerHTML = newImage.outerHTML;
}
console.log(app.imagem)
fileReader.readAsDataURL(fileToLoad);
}
}
}
})
index.js
'use strict'
const filmes = require('../models/filmes'),
express = require('express'),
bodyParser = require('body-parser')
const erro404 = (req, res, next) => {
let erro = new Error(),
locals = {
titulo: "Erro",
descricao: "Página não encontrada !",
contato: "Entre em contato com o administrador do sistema.",
erro: erro
}
erro.status = 404
res.render('erro.jade', locals)
next()
}
var app = express()
app
.use(bodyParser.json({limit: '50mb'}))
.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit:50000
}))
.use(filmes)
.get('/', (req, res, next) => {
req.getConnection((err, filmes) => {
filmes.query('SELECT * FROM filmes', (err, rows) =>{
if (err){
next(new Error('Não há filmes.'))
}else{
let locals = {
principal: 'Lista de Filmes',
dados: rows
}
res.render('index', locals)
}
})
})
//next()
})
.get('/add', (req,res, next) => {
res.render('add_filmes.jade', {principal: 'Lista de Filmes', titulo: 'Adicionar Filme'})
})
.post('/', (req, res, next) => {
req.getConnection((err, filmes) => {
let filme = {
id_filme: req.body.id_filme,
titulo: req.body.titulo,
lancamento: req.body.lancamento,
avaliacao: req.body.avaliacao,
imagem: req.body.imagem
}
console.log(filme)
filmes.query('INSERT INTO filmes SET ?', filme, (err, rows) =>{
return (err) ? next(new Error('Erro ao inserir o filme.')) : res.redirect('/')
})
})
})
.get('/editar/:id_filme', (req, res, next) => {
let id_filme = req.params.id_filme
console.log(id_filme)
req.getConnection((err, filmes) => {
filmes.query('SELECT * FROM filmes WHERE id_filme = ?', id_filme, (err, rows) => {
console.log(err, "---", rows)
if(err){
next(new Error('Erro ao pegar os dados do filme.'))
}else{
let locals = {
principal: 'Lista de Filmes',
titulo: 'Editar Filme',
dados: rows
}
res.render('editar_filme.jade', locals)
}
})
})
})
.post('/atualizar/:id_filme', (req, res, next)=>{
console.log(JSON.stringify(req.body))
req.getConnection((err, filmes) => {
let filme = {
id_filme: req.body.id_filme,
titulo: req.body.titulo,
lancamento: req.body.lancamento,
avaliacao: req.body.avaliacao,
imagem: req.body.imagem
}
console.log(filme)
filmes.query('UPDATE filmes SET ? WHERE id_filme = ?', [filme, filme.id_filme], (err, rows) =>{
return (err) ? next(new Error('Erro ao atualizar o filme.')) : res.redirect('/')
})
})
})
.post('/excluir/:id_filme', (req, res, next)=>{
let id_filme = req.params.id_filme
console.log(id_filme)
req.getConnection((err, filmes) => {
filmes.query('DELETE FROM filmes WHERE id_filme = ?', id_filme, (err, rows) => {
console.log(err, "---", rows)
return (err) ? next(new Error('Registro não encontrado !')) : res.redirect('/')
})
})
})
.use(erro404)
module.exports = app
```
<b>Thanks in advance.</b>.
【问题讨论】:
-
不要将图像存储在数据库中,将图像存储在数据库中是一种不好的做法。您所做的是将它们存储在某个文件系统(您的服务器、S3 等)上,并将路径存储在您的数据库中。
-
感谢您的提示,不知道这是一种不好的做法。你说做stackoverflow.com/questions/20213400/…之类的事情这是一个了解nodejs的测试,但是当我去开发生产时,图像无法在任何驱动器中访问。
-
这很简单,但是可以。如果符合您的要求,您可以将文件存储在您的服务器上,或者将其移动到其他地方,但仅将此类文件的路径存储在您的数据库中,而不是全部内容。