乐闻世界logo
搜索文章和话题
Node 通过 http 协议上传文件到服务器

Node 通过 http 协议上传文件到服务器

乐闻的头像
乐闻

2022年06月18日 12:14· 阅读 1598

前言

web端上传图片、文件等流化数据,一般使用form表单方式,或者通过 Ajax 方式上传时就使用 FormData 来承载流化数据。具体可以参考AJAX 图片上传功能实现(点击,拖拽,粘贴)Koa 服务端

同时也存在需要使用 Node 操作方式上传文件到 http 服务器上,下文详细记载。

一、request

  1. node 端添加 request 依赖库

    javascript
    npm install request
  2. 文件上传操作

    javascript
    const path = require('path'); const fs = require('fs'); const request = require('request'); let files = fs.readdirSync(path.join(__dirname, 'dist')); let needUploads = []; //收集需要上传的文件 files.forEach(async name => { needUploads.push(fs.createReadStream(path.join(__dirname, `dist/${name}`))); }); //上传操作 request.post( { url: 'https://localhost:3000/upload', formData: needUploads }, (err, httpResponse, body) => {   console.log('Upload successful! Server responded with:', body); }, );
  3. 服务器代码

    javascript
    ... const koaBody = require('koa-body'); ... app.use( koaBody({   multipart: true, }), );
  4. 服务器业务代码

    javascript
    const router = require('koa-router')(); const fs = require('fs'); const path = require('path'); //接受上传文件接口 router.post('/upload', async (ctx, next) => { const files = ctx.request.files; for (let key in files) {   let file = files[key];   const reader = fs.createReadStream(file.path); // 创建可读流   const upStream = fs.createWriteStream(     path.resolve(__dirname, `../public/${file.name}`),   );   reader.pipe(upStream); } ctx.response.status = 200; ctx.body = {   code: 200, }; }); module.exports = router;
    1. 实例案例图片

    image-20210126181817283

标签: