简易的Node图片服务器(上传,获取)

用Express实现一个简易的图片服务器。

所需要的安装的插件 npm i xxx

  1. express -- http://expressjs.com/
  2. multer -- https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md

Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。

  1. cors -- 主要用来解决跨域问题的 https://www.npmjs.com/package/cors

实现步骤

1. 先用express开启一个服务器

const express = require('express');

const app = express()

app.get('/', (req, res) => {
  console.log('测试是否成功')
})
app.listen(7777, () => {
  console.log('7777port start')
})

2. 用multer cors

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/upload',  upload.single('uploads') ,(req, res) => {
  res.set('Access-Control-Allow-Origin', '*'); // 这个是不用cors,自行设置的可跨域访问,
  res.send(`http://localhost:7777/preview/${req.file.filename}`)
})

// 用cors
app.get('/preview/:key',cros() , (req, res) => {
// 获取图片地址
  res.sendFile(`/uploads/${req.params.key}`, {
    root: __dirname,
    headers: {
      'Content-Type': 'image/jpge',
    }
  }, (error) => {
    console.log(error)
  })
})

完整代码

const express = require('express')
const multer = require('multer')
const cros = require('cors');

const upload = multer({ dest: 'uploads/' });
const app = express()

app.get('/', (req, res) => {
  res.send('Hello World');
})
app.post('/upload', cros(), upload.single('uploads') ,(req, res) => {
  // res.set('Access-Control-Allow-Origin', '*');
  res.send(`http://localhost:7777/preview/${req.file.filename}`)
})
app.get('/preview/:key',cros() , (req, res) => {
  res.sendFile(`/uploads/${req.params.key}`, {
    root: __dirname,
    headers: {
      'Content-Type': 'image/jpge',
    }
  }, (error) => {
    console.log(error)
  })
})

app.listen('7777', () => {
  console.log('7777端口已开启')
})

前端代码

<body>
  <form id="f" action="http://localhost:7777/upload" enctype="multipart/form-data" method="POST">
    <input type="file" name="uploads" id="xxx">
    <input type="submit" value="开始上传">
  </form>
  <img src="" id="images">
  <script>
    f.addEventListener('submit', (e) => {
      e.preventDefault();
      console.log('表单提交了');
      const form = new FormData();
      const action = f.getAttribute('action');
      form.append(xxx.name, xxx.files[0])
      const xhr = new XMLHttpRequest();
      xhr.open('POST', action);
      xhr.onload = function() {
        document.querySelector('#images').setAttribute('src', xhr.response);
      }
      xhr.send(form);
    })
  </script>
</body>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容