美文网首页
NodeJS文件上传

NodeJS文件上传

作者: icaojinyu | 来源:发表于2019-10-10 08:31 被阅读0次

    使用multer上传文件,默认不会给文件添加扩展名

    一、package.json

    {
      "name": "file_upload",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "axios": "^0.19.0",
        "cors": "^2.8.5",
        "express": "^4.17.1",
        "multer": "^1.4.2",
        "randomstring": "^1.1.5",
        "vue": "^2.6.10"
      }
    }
    

    二、app.js

    var express = require('express')
    var multer = require('multer')
    var randomstring = require('randomstring')
    var path = require('path')
    var app = express()
    
    app.use(require('cors')())
    app.use(express.json())
    
    // 指定上传文件的存储目录及文件名
    var storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, './uploads')
      },
      filename: function (req, file, cb) {
        var ext = path.extname(file.originalname)
        cb(null, randomstring.generate(44) + ext)
      }
    })
    
    var upload = multer({storage: storage})
    
    app.post('/upload', upload.single('file'), (req, res) => {
      var file = req.file
      console.log(file)
      if (file) {
        file.url = `http://localhost:3000/${file.filename}`
        res.send(file)
      } else {
        res.send({
          msg: '老铁,别皮了,请上传文件吧'
        })
      }
    })
    
    // 静态资源访问
    app.use(express.static('uploads'))
    app.use(express.static('public'))
    
    app.listen(3000, () => {
      console.log('http://localhost:3000')
    })
    

    三、upload_test.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
      <script src="node_modules/axios/dist/axios.min.js"></script>
      <script src="node_modules/vue/dist/vue.min.js"></script>
    </head>
    <body>
    <div id="app">
      <form @submit.prevent="upload" action="">
        <p>
          <input @change="fn" ref="file" type="file">
        </p>
        <p>
          <input type="submit">
        </p>
      </form>
    </div>
    <script>
      var http = axios.create({
        baseURL: 'http://localhost:3000'
      })
    
      Vue.config.productionTip = false
      Vue.prototype.$http = http
    
    
      new Vue({
        el: '#app',
        methods: {
          fn(){
            console.log(this.$refs.file.files)
          },
          upload() {
            var formData = new FormData()
            formData.append('file', this.$refs.file.files[0])
            this.$http.post('/upload', formData, {
              headers: {
                'content-type': 'multipart/form-data'
              }
            }).then((res) => {
              console.log(res.data)
            }).catch((err) => {
              console.log(err)
            })
          }
        }
      })
    </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:NodeJS文件上传

          本文链接:https://www.haomeiwen.com/subject/lbxopctx.html