koa2的文件上传
使用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);
}
});
}
});
koa2的文件上传的更多相关文章
- NodeJs koa2实现文件上传
[转载自:]https://www.jianshu.com/p/34d0e1a5ac70 知识讲解 koa2框架是一个基于中间件的框架,也就是说,需要使用到的功能,比如路由(koa-router),日 ...
- koa2实现文件上传服务
使用方法 方法一: 使用中间介 koa-body 方法二: 自己写个借口去接收数据流并保存 方法三: 使用 koa-body 接受文件,自己写个接口做文件保存或处理等操作 这里简单记录方法三 app. ...
- element-vue-koa2-mysql实现文件上传
友情提示:这篇博客不会详细说明搭建过程 阅读群体建议:第一次使用node或者koa2写文件上传或者下载,因为你不知道用fs的哪个方法,我也是从fs里试水试了一天,各种百度才搞出来的,特别学过java的 ...
- koa2基于stream(流)进行文件上传和下载
阅读目录 一:上传文件(包括单个文件或多个文件上传) 二:下载文件 回到顶部 一:上传文件(包括单个文件或多个文件上传) 在之前一篇文章,我们了解到nodejs中的流的概念,也了解到了使用流的优点,具 ...
- jquery.uploadify文件上传组件
1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- Java FtpClient 实现文件上传服务
一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...
- 小兔Java教程 - 三分钟学会Java文件上传
今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...
- ,net core mvc 文件上传
工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...
随机推荐
- [No000016F]高并发下线程安全的单例模式(最全最经典)
在所有的设计模式中,单例模式是我们在项目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单 ...
- [No0000C8]英特尔快速存储IRST要不要装
IRST (英特尔快速存储技术)Intel Rapid Storage Technology(简称IRST)又称英特尔快速存储技术. Intel Rapid Start Technolog同样是简称( ...
- iOS10原生的语音转文字功能
#import <Foundation/Foundation.h> #import <Speech/Speech.h> @interface SpeechListener : ...
- maven添加settings.xml使用阿里云仓库
在~/.m2/repository目录下新建settings.xml,内容如下: <mirrors> <!-- mirror | Specifies a repository mir ...
- 关于.htaccess的设置
RewriteEngine On #设置是否开始rewrite RewriteBase / #设置开始匹配的目录,比如web程序放在/var/www/html/test下,则这个值要设置为" ...
- Oracle使用par文件进行全库导入导出
expdp \"/ as sysdba\" PARFILE=/oracle/expdp/AINEWAWARD_20181005.par directory=dumpdir dump ...
- PLSQL分级取数据
分级取数据 select employee_id,last_name,job_id,manager_id from employees start with employee_id=101 --emp ...
- elasticsearch 出现“java.lang.OutOfMemoryError: Java heap space”
默认情况下,Elasticsearch JVM默认使用最小和最大大小为2 GB的堆.迁移到生产环境时,配置堆大小以确保Elasticsearch堆足够的大很重要的. Elasticsearch将通过X ...
- 用Pyinstaller 实现py.转化为exe可执行文件----二维码实例
1,安装 Pyinstaller 命令提示符窗口:pip install pyinstaller 2,制作二维码脚本 d5_code.py from MyQR import myqr #生成二维码 w ...
- NumPy 广播机制(Broadcasting)
一.何为广播机制 a.广播机制是Numpy(开源数值计算工具,用于处理大型矩阵)里一种向量化数组操作方法. b.Numpy的通用函数(Universal functions) 中要求输入的两个数组sh ...