onvno / pokerface

日常技术文章阅读整理
3 stars 0 forks source link

20190508 - Node文件上传下载 #25

Open onvno opened 5 years ago

onvno commented 5 years ago

Koa2 之文件上传下载

上传

const router = require('koa-router')();
const fs = require('fs');

router.post('/upload', async (ctx){
    const file = ctx.request.body.files.file;   // 获取上传文件
    const reader = fs.createReadStream(file.path);  // 创建可读流
    const ext = file.name.split('.').pop();     // 获取上传文件扩展名
    const upStream = fs.createWriteStream(`upload/${Math.random().toString()}.${ext}`);     // 创建可写流
    reader.pipe(upStream);  // 可读流通过管道写入可写流
    return ctx.body = '上传成功';
})

文件下载

const router = require('koa-router')();
const send = require('koa-send');

router.post('/download/:name', async (ctx){
    const name = ctx.params.name;
    const path = `upload/${name}`;
    ctx.attachment(path);
    await send(ctx, path);
})

文件下载比较优的方案

<button onclick="handleClick()">立即下载</button>
<iframe name="myIframe" style="display:none"></iframe>
<script>
    const handleClick = () => {
        window.open('/download/1.png', 'myIframe');
    }
</script>