express 服务器保存图片及将图片返回前端

服务端保存图片

var express = require('express');
var router = express.Router();
var token = require('../tools/token')
var mysql = require('../tools/mysql')

var moment = require("moment");

var fs = require('fs');
const multer = require('multer');
const multiparty = require('multiparty');
var path = require("path");


var storage = multer.diskStorage({
    // 配置文件上传后存储的路径
    destination: function (req, file, cb) {
        // NodeJS的两个全局变量
        // console.log(__dirname);  //获取当前文件在服务器上的完整目录 
        // console.log(__filename); //获取当前文件在服务器上的完整路径 
        cb(null, path.join(__dirname, '../public/images'))
    },
    // 配置文件上传后存储的路径和文件名
    filename: function (req, file, cb) {
        console.log('file', file.originalname);
        cb(null, file.originalname)
    }
})
var upload = multer({ storage: storage })


//"file" 保存图片
router.post("/api/pic/upload", upload.single("file"), (req, res) => {
    let { gh } = req.body;


    let sql = `UPDATE user SET icon='${req.file.filename}' where gh=${gh}`

    try {
        mysql.query(sql, function (err, result) {
            if (err) {
                console.log(err)
                return
            }

            if (result.length != 0) {
                res.json({
                    status: 'succeed',
                    msg: "图片上传成功",
                })
            }
            else {
                res.json({
                    status: 'faild',
                    msg: '保存失败',
                })
            }
        })

    } catch (error) {
        res.json({
            status: 'faild',
            msg: '保存失败',
        })
    }
})


服务端返回图片

type
{
  "css": "text/css",
  "gif": "image/gif",
  "html": "text/html",
  "ico": "image/x-icon",
  "jpeg": "image/jpeg",
  "jpg": "image/jpeg",
  "js": "text/javascript",
  "json": "application/json",
  "pdf": "application/pdf",
  "png": "image/png",
  "svg": "image/svg+xml",
  "swf": "application/x-shockwave-flash",
  "tiff": "image/tiff",
  "txt": "text/plain",
  "wav": "audio/x-wav",
  "wma": "audio/x-ms-wma",
  "wmv": "video/x-ms-wmv",
  "xml": "text/xml"
}




// 返回前端
router.get('/api/pic/get', (req, res, next) => {

    
    const filePath = path.resolve(__dirname, `../public/images/${req.query.gh}.jpg`);
    // 给客户端返回一个文件流 type类型
    res.set( 'content-type', {"png": "image/png","jpg": "image/jpeg"} );//设置返回类型
    var stream = fs.createReadStream( filePath );
    var responseData = [];//存储文件流
    if (stream) {//判断状态
        stream.on( 'data', function( chunk ) {
          responseData.push( chunk );
        });
        stream.on( 'end', function() {
           var finalData = Buffer.concat( responseData );
           res.write( finalData );
           res.end();
        });
    }
})

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Vue中,要显示存储在数据库中的图片,可以通过以下步骤实现: 1. 在Vue组件中,使用`<img>`标签来显示图片: ``` <template> <div> <img :src="imageURL" /> </div> </template> ``` 2. 在Vue组件的`data`中定义一个变量来保存图片的URL: ``` <script> export default { data() { return { imageURL: '' } }, mounted() { // 在组件挂载完成后,从数据库中获取图片的URL // 假设获取的URL保存在变量imageURL中 this.imageURL = 'https://xxxxx.com/xxx.jpg'; } } </script> ``` 3. 在后端API中,将存储在数据库中的图片转换为URL,并返回前端。 具体实现方式因后端语言和框架而异,下面以Node.jsExpress框架为例: ``` const express = require('express'); const app = express(); const path = require('path'); const fs = require('fs'); const multer = require('multer'); // 存储图片的文件夹 const uploadDir = path.join(__dirname, 'uploads'); // 配置multer中间件 const upload = multer({ dest: uploadDir }); // 定义API路由 app.post('/api/upload', upload.single('image'), (req, res) => { // 获取上传的图片文件 const file = req.file; // 将图片文件重命名为随机字符串,防止重名 const newFilename = Math.random().toString(36).substring(2, 15) + file.originalname.substring(file.originalname.lastIndexOf('.')); // 将图片文件从临时目录移动到存储文件夹 fs.renameSync(file.path, path.join(uploadDir, newFilename)); // 构造图片URL并返回前端 const imageURL = 'https://xxxxx.com/uploads/' + newFilename; res.json({ imageURL }); }); ``` 以上代码实现了一个上传图片的API,将上传的图片保存到服务器上的`uploads`文件夹中,并返回图片的URL给前端。在Vue组件中,通过访问这个API来获取图片URL,并将其赋值给`imageURL`变量,就可以在页面上显示图片了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值