当前位置: 首页 > news >正文

koa文件上传2

npm install uuid

let uuid = require('uuid/v4')

app.use(convert(betterBody({uploadDir:path.resolve(__dirname,'upload')})))

Buffer.prototype.split = function(sep){

let len = Buffer.from(sep).length // 分隔符的字节长度

let pos = 0

let index = 0

let arr = []

while(-1!=(this.indexOf(sep,pos))){

arr.push(this.slice(pos,inndex))

pos+=len + index

}

arr.push(this.slice(pos))

return arr

}

let buffer = Buffer.from('ss**ss**ss').split('**')

自己写一个betterBody

function betterBody({uploadDir}){

return async (ctx,next)=>{

let arr = []

ctx.req.on('data',funcction(data){

arr.push(data)

})

ctx.req.on('end',function(){

// 最后resolve出去

if(ctx.get('content-Type').includes('multipart')){

let r = Buffer.concat(arr).toString()

let boundary = "--"+ ctx.get('content-type').split("=")[0]

let lines = r.split(boundary).slice(1,-1)

// 取到中间有用的部分

let fileds = {}

linnes.forEach((line)=>{

let [head,conntent] = line.split('\r\n\r\n')

head =head.toString()

if(head.includes('filename')){

// 是文件读

line.slice(head.length+4,2)

let uuid = require('uuid/v4')

let fs = require('fs')

fs.writeFileSync(path.resolve(__dirname,uploadDir,uuid()+ ''"))

// 取出头

} else {

// 文本

let key = head.match(/name="([\s\S]*)"/im)[1]

let value = content.toString().slice(0,2)

fileds[key] = value

}

})

}

 

})

}

}

分割线分割

 

koa 开发的eggjs

express 自带中间件 支持ejs 和jade 。 render

 

 

 

相关文章:

  • 怎样成为一个Flash Lite Developer (开发篇)
  • Chat room help file
  • 小程序 - 使用async出现regeneratorRuntime is not defined错误 不能使用async 和await 的解决方案
  • react willReceiveProps 是深度比较 浅层拷贝 (虽然值变过来了 但是)还是会render 一次 immutable1
  • 怎样成为一个Flash Lite Developer (工具篇)
  • immutable与可变数据 不可变数据
  • 辞职:也要像个君子般离开
  • redux connect 原理解析 传入的mapstate 和mapdispatch connect()第一次执行后返回一个函数 这个函数接收到的参数是一个组件 对组件进行加工返回
  • Flash Lite 与 J2ME 分析比较
  • react dva 复习subscriptions: setup
  • pm2 pm2 --help 使用指南
  • 驳斥一些不看好Flash的观点
  • eruda . 移动端console输出日志调试工具
  • referer
  • 2006年3GSM全球大会10佳手机
  • Angular2开发踩坑系列-生产环境编译
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • DOM的那些事
  • es6
  • JavaScript 基本功--面试宝典
  • JWT究竟是什么呢?
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Netty 4.1 源代码学习:线程模型
  • Objective-C 中关联引用的概念
  • React-flux杂记
  • SAP云平台里Global Account和Sub Account的关系
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SQLServer之索引简介
  • 百度地图API标注+时间轴组件
  • 基于HAProxy的高性能缓存服务器nuster
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​第20课 在Android Native开发中加入新的C++类
  • # 达梦数据库知识点
  • #git 撤消对文件的更改
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C++20) consteval立即函数
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (六)Hibernate的二级缓存
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (推荐)叮当——中文语音对话机器人
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)视频码率,帧率和分辨率的联系与区别
  • ../depcomp: line 571: exec: g++: not found
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 材料检测系统崩溃分析
  • .net 受管制代码
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @ComponentScan比较
  • @软考考生,这份软考高分攻略你须知道
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具