Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send image as response in node js

Tags:

node.js

In my code i want to send a image as response on button click. But the problem is that it shows that there is no image like that. Also i am saving image at that time only by user and it is being saved in a folder names images in public folder. That's working fine. I want my image to be printed that is being submitted by user.

Here is my Home.ejs:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <link rel="stylesheet" href="/Css/style.css">
</head>

<body>
    <form action='/post' method="POST" enctype="multipart/form-data">
        <input type="file" name="image" style="width:300px; border: 1px solid #ccc;"><br><br>
        <button type="submit" class="btn">Upload</button>
        <div id="x"></div>
    </form>
    <script type="text/javascript">

    </script>
</body>

</html>

And here is my index.js:

const express = require('express')
const app = express()
const bodyparser = require('body-parser')
const fileUpload = require('express-fileupload')
const mysql = require('mysql')

app.use(express.static("./public"))

app.set('view engine', 'ejs')

app.use(bodyparser.json())
app.use(bodyparser.urlencoded({
    extended: true
}))

app.use(fileUpload())

const db = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "",
    database: "testing"
})
db.connect(function (err) {
    if (err) {
        return console.error('error: ' + err.message);
    }
    console.log('Connected to the MySQL server.');
})

app.get("/", (req, res) => {
    res.render('Home');
})


app.post("/post", (req, res) => {
    var file = req.files.image
    if (file.mimetype == "image/jpeg" || file.mimetype == "image/png" || file.mimetype == "image/gif") {
        var imageName = file.name;
        console.log(imageName);
        var imgsrc = 'http://127.0.0.1:3000/images/' + imageName
        var insertData = "INSERT INTO users_file(file_src)VALUES(?)"
        db.query(insertData, [imgsrc], (err, result) => {
            if (err) throw err
            file.mv('public/images/' + imageName)
            res.send("<img src=`public/images/${imageName}`>")
        })
    }
}
like image 329
Noob Avatar asked Jan 18 '26 12:01

Noob


1 Answers

Try using res.sendFile(filepath) as response

file.mv() is asynchronous function. That's why it shows "no such file"

.

here is what your /post should look like:

app.post("/post", (req, res) => {
    var file = req.files.image
    if (file.mimetype == "image/jpeg" || file.mimetype == "image/png" || file.mimetype == "image/gif") {
        var imageName = file.name;
        console.log(imageName);
        var imgsrc = 'http://127.0.0.1:3000/images/' + imageName
        var insertData = "INSERT INTO users_file(file_src)VALUES(?)"
        db.query(insertData, [imgsrc], async (err, result) => { // <-- notice the async here
            if (err) throw err
            await file.mv('public/images/' + imageName); // <-- added await
            res.sendFile(`public/images/${imageName}`); // <-- here send the file directly 
        })
    }
})

** If you want to use res.send() instead of res.sendFile(); you can try following:

app.post("/post", (req, res) => {
    var file = req.files.image
    if (file.mimetype == "image/jpeg" || file.mimetype == "image/png" || file.mimetype == "image/gif") {
        var imageName = file.name;
        console.log(imageName);
        var imgsrc = 'http://127.0.0.1:3000/images/' + imageName
        var insertData = "INSERT INTO users_file(file_src)VALUES(?)"
        db.query(insertData, [imgsrc], async (err, result) => { // <-- notice the async here
            if (err) throw err
            await file.mv('public/images/' + imageName); // <-- added await
            res.send(`<img src="public/images/${imageName}">`); //<-- edited this line
        })
    }
})
like image 126
Hello World Avatar answered Jan 20 '26 04:01

Hello World



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!