使用方法
方法一:
使用中间介 koa-body
方法二:
自己写个借口去接收数据流并保存
方法三:
使用 koa-body 接受文件,自己写个接口做文件保存或处理等操作
这里简单记录方法三
app.js
const Koa = require('koa') const koaBody = require() const app = new Koa() app.use(koaBody({ multipart: reue, // 支持表单上传 formidable: { maxFileSize: 10 * 1024 * 1024, // 修改文件大小限制,默认位2M } }))
api.js
const router = require('koa-router')() const uploadimg = require('./uploadImg') router.prefix('/api') router.post('/uploadImg', async function(ctx, next) { const imgUrl = await uploadimg(ctx); if (imgUrl) { ctx.body = { data: imgUrl, message: '文件上传成功', code: '0', } } else { ctx.body = { data: imgUrl, message: '文件上传失败', code: '1', } } }) module.exports = router
uploadImg.js
const path = require('path'); const fs = require('fs'); const uploadimg = (ctx) => { console.log(JSON.stringify(ctx.request, null, ' ')); let remotefilePath = null; if (ctx.request.files['file']) { // 创建可读流 const reader = fs.createReadStream(ctx.request.files['file']['path']); let filePath = `${path.resolve(__dirname, '../../publicPath/images')}/${ctx.request.files['file']['name']}`; remotefilePath = `http://yourServerHostAndPath/images/${ctx.request.files['file']['name']}`; // 创建可写流 const upStream = fs.createWriteStream(filePath); // 可读流通过管道写入可写流 reader.pipe(upStream); } return remotefilePath; } module.exports = uploadimg;
在前端中上传文件
upLoadFile.js
const upload = (file) => { const formData = new FormData(); formData.append('file', file); return fetch({ method: 'post', body: formData, }) }
如上即可,注意的地方,使用 fetch 的话不用刻意去设置 header 的 Content-Type 属性,fetch 会自动给你设置好的,如果你设置的不对还可能导致上传失败。