使用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
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);

  前端代码

		<form action="http://localhost:3000/" method="post" enctype="multipart/form-data">
<input type="text" name="name" id="" value="姓名" />
<input type="text" name="pwd" id="" value="123456" />
<input type="file" name="file" id="file" value="" multiple="multiple" />
<input type="submit" value="提交"/>
</form>  

使用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);
}
});
} });

  

最新文章

  1. __new__静态方法
  2. Python 启动本地服务
  3. 在程序中使用geos.dll
  4. android studio 代理配置
  5. oracle中的dual表详解
  6. 把sublime添加到右键菜单(转)
  7. BZOJ 1185 最小矩形覆盖
  8. accept功能
  9. 《JS权威指南学习总结--toString()和valueOf()方法》
  10. ReactNative 基础学习
  11. PHP常用函数集合
  12. hdu 5266 pog loves szh III(lca + 线段树)
  13. Python的各种推导式合集
  14. hdu 4825 Xor Sum (01 Trie)
  15. C#使用Emit生成构造函数和属性
  16. 【Java基础】5、java中的匿名内部类
  17. Python(网络基础)
  18. JDK,常见数据结构解读
  19. SystemLogParser ArcGIS Server运维工程师的好助手
  20. 父div高度不能自适应子div高度的解决方案

热门文章

  1. 设备重力感应 window.DeviceOrientationEvent
  2. 2018ACM-ICPC南京区域赛M---Mediocre String Problem【exKMP】【Manacher】
  3. c# 编程小技巧
  4. 【鬼畜】UVA - 401每日一题&#183;猛男就是要暴力打表
  5. webpack dev server 配置 启动项目报错Error: listen EADDRINUSE
  6. CSDN论坛 &gt; Delphi &gt; VCL组件开发及应用 DBLookupComboBox用法
  7. VPS常用操作(自用)
  8. Bloom Filter 数据结构去重
  9. ELKstack5.6.5
  10. java JDBC (二) 防止注入/参数化