nodejs 实现文件上传

Posted Emrof

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs 实现文件上传相关的知识,希望对你有一定的参考价值。

需求:在做nodejs + express + vue博客项目时需要实现图片上传到后台和删除的功能,这里做一个记录。

  • nodejs 实现图片上传
// 导入express框架
const express = require(\'express\')

const multer=require(\'multer\');

const path=require(\'path\');
const fs=require(\'fs\');
// 创建路由
const upload = express.Router()

var Multer=multer({dest: \'./public/uploads\'}); //设置上传的的图片保存目录
// 表示接收任何上传的数据 对应的有个 upload.single(\'user\') 表示只接收name为user的上传数据
upload.use(Multer.any());

upload.post(\'/images\',(req,res)=> {
  // 带后缀的路径
  const newpath = req.files[0].path + path.parse(req.files[0].originalname).ext
  // 带后缀的文件名
  const newname = req.files[0].filename +  path.parse(req.files[0].originalname).ext
  // 重命名文件名
  fs.rename(req.files[0].path,newpath,err=>{
    if(err) return res.send({
      "data": null,
      "meta": {
          "msg": "文件上传失败!",
          "status": 400
      }
    })
  })
  res.send({
    "data": newname,
    "meta": {
        "msg": "文件上传成功!",
        "status": 201
    }
  })
})

// 将路由对象作为模块成员进行导出
module.exports = upload
  • nodejs 实现图片删除
// 导入express框架
const express = require(\'express\')

const path=require(\'path\');
const fs=require(\'fs\');

// 创建路由
const deleteImg = express.Router()

deleteImg.delete(\'/deleteImg/:name\',(req,res)=> {
  // 删除图片
  const name = req.params.name
  fs.unlink(\'./public/uploads/\' + req.params.name, err=> {
    if(err) return res.send({
      "data": null,
          "meta": {
              "msg": "删除失败",
              "status": 400
          }
    })
  })
  res.send({
    "data": null,
        "meta": {
            "msg": "删除成功",
            "status": 200
        }
  })
})

module.exports = deleteImg
  • vue 实现图片上传
<template>
<!-- 图片上传 -->
  <el-upload
    class="avatar-uploader"
    action="http://127.0.0.1:8889/images"
    :show-file-list="false"
    :on-success="handleAvatarSuccess"
    :before-upload="beforeAvatarUpload"
  >
    <img v-if="imageUrl" :src="imageUrl" class="avatar" />
    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  </el-upload>
</template>

<script>
export default {
  data () {
    return {
      // 提交文章数据
      article: {
        title: \'\',
        author: \'\',
        cover: \'\',
        content: \'\',
        sort: \'\'
      },
      imageUrl: \'\'
    }
  },
  methods: {
    // 选择文章封面
    async handleAvatarSuccess (res, file) {
      // 删除之前的图片
      await this.$http.delete(`/deleteImg/${this.article.cover}`)
      // 获取图片文件名
      this.article.cover = res.data
    },
    // 上传图片之前
    beforeAvatarUpload (file) {
      // 图片预览
      this.imageUrl = URL.createObjectURL(file)
    }
  }
}
</script>

以上是关于nodejs 实现文件上传的主要内容,如果未能解决你的问题,请参考以下文章

nodejs关于前后端图片上传的思路及实现代码

nodejs关于前后端图片上传的思路及实现代码

nodejs 实现文件上传

最近在研究nodejs如何实现文件上传功能

NodeJS使用formidable实现文件上传

nodejs 实现简单的文件上传功能