博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
koa2的文件上传
阅读量:5061 次
发布时间:2019-06-12

本文共 3362 字,大约阅读时间需要 11 分钟。

使用koa2搭建文件上传服务,后端代码

const os = require('os');const path = require('path');const koaBody = require('koa-body');const Koa = require('koa');const app = new Koa();const fs = require("fs");const main = async function(ctx) {  //const tmpdir = os.tmpdir(); //返回系统临时文件  	  const tmpdir = path.join(__dirname, "static");	    const filePaths = [];  const files = ctx.request.files || {};  const params = ctx.request.body.fields	 console.log(params);   for (let key in files) {   	const file = files[key];   	if(Object.prototype.toString.call(file) == '[object Array]'){   		for(var j = 0; j < file.length; j++ ){   			witeFile(file[j]);   		}   	}else{   		witeFile(file);   		   }  }  function witeFile(file){  	const filePath = path.join(tmpdir, file.name);    const reader = fs.createReadStream(file.path);    const writer = fs.createWriteStream(filePath);    reader.pipe(writer);    filePaths.push(filePath);  }    ctx.body = filePaths;};app.use(koaBody({ multipart: true }));app.use(main);app.listen(3000);

  前端代码

  

 

使用ajax 上传

$("#file")[0].onchange = function(e){			console.log(this.files);			var filse = this.files;			var fd = new FormData();			fd.append("file",filse[0]);			$.ajax({				type:"post",				data:fd,				processData:false,				contentType:false,				url:"http://192.168.20.104:3000",			}).then(function(ret){				console.log(ret);			}).catch((e)=>{				console.log(e);			})		}

  

注意:

新版本的koa-body通过ctx.request.files获取上传的文件 

旧版本的koa-body通过ctx.request.body.files获取上传的文件 

 

 

另外,附上express 的文件上传:

const multiparty = require('multiparty');router.post('/file', function(req, res, next) {    //生成multiparty对象,并配置上传目标路径    const form = new multiparty.Form()    // //设置编辑    form.encoding = 'utf-8'    // //设置文件存储路径    form.uploadDir = "./public/static/"    // //设置单文件大小限制    //form.maxFilesSize = 2 * 1024 * 1024    // form.maxFields = 1000;  设置所以文件的大小总和    // 上传完成后处理    form.parse(req, (err, fields, files) => {        if (err) {            console.log("parse:",err);            res.json(configVar.fileUp);        } else {            const inputFile = files.file[0];            const uploadedPath = inputFile.path            var  imgtype = inputFile.originalFilename;            const typarr = imgtype.split(".");            const typ = typarr[typarr.length -1];            const nm =  new  Date().getTime()  +  '' +  Math.floor(Math.random()*1000000) ;            console.log(fields.old);            imgtype = nm + '.' + typ;            const inPath = `./public/static/${imgtype}`; //重命名的路径            // 判断是否存在./dist/static/files文件            fs.stat('./public/static', (err, stats) => {                if (JSON.stringify(stats) === undefined) {                    fs.mkdirSync('./public/static')                }                storeFiles(uploadedPath, fields, inPath)            });        }    });    function storeFiles(uploadedPath, fields, inPath) {        //重命名为真实文件名        fs.rename(uploadedPath, inPath,  (err) => {            if (err) {                console.log("rename:",err);                res.json(configVar.rename);            } else {                var ret  = {                    data:inPath.substring(8)                };                Object.assign(ret , configVar.success);                res.json(ret);            }        });    }});

  

 

转载于:https://www.cnblogs.com/muamaker/p/8917210.html

你可能感兴趣的文章
MVC引用asp.net报表(测试小例子)
查看>>
写出float x 与“零值”比较的if语句
查看>>
我是MVC菜鸟---MVC的优劣对比
查看>>
iOS性能优化/内存优化常用方法
查看>>
51Nod 1421
查看>>
51Nod 1289 大鱼吃小鱼
查看>>
linux ps查进程 kill关闭进程
查看>>
人月神话读后感2
查看>>
JDOM 创建 XML
查看>>
mysql字符串根据指定字符分割
查看>>
腾讯新闻中心首页改版啦
查看>>
hdu 1022 Train Problem I
查看>>
Ubuntu 各版本的几个国内更新源
查看>>
_019_中断系统调用_终端(皆为粗略)
查看>>
datagridview选中一行属性
查看>>
使用repeater实现gridview的功能
查看>>
Java基础:Java抽象类与接口的区别
查看>>
C# winform 类型转换和时间详解
查看>>
排序算法
查看>>
java操作二叉树
查看>>