【转载】egg

egg学习(一):使用eggegg-mongoose搭建本地数据库 搭建一个egg项目: $ npm i egg-init -g $ egg-init egg-example --type=simple $ cd egg-example $ npm i 启动项目 $ npm run dev $ open localhost:7001 链接到本地的MongoDB: 安装mongoose并引入到项目中 npm install egg-mongoose -S 在... 阅读详情

const { ctx } = this;

console.log(ctx.request.body);

console.log(‘got %d files’, ctx.request.files.length);

for (const file of ctx.request.files) {

console.log('field: ’ + file.fieldname);

console.log('filename: ’ + file.filename);

console.log('encoding: ’ + file.encoding);

console.log('mime: ’ + file.mime);

console.log('tmp filepath: ’ + file.filepath);

let result;

try {

// 处理文件,比如上传到云端

result = await ctx.oss.put(‘egg-multipart-test/’ + file.filename, file.filepath);

} finally {

// 需要删除临时文件

await fs.unlink(file.filepath);

}

console.log(result);

}

}

};

  • [](()Stream 模式:

如果你对于 Node 中的 Stream 模式非常熟悉,那么你可以选择此模式。在 Controller 中,我们可以通过 ctx.getFileStream() 接口能获取到上传的文件流。

  1. 上传 / 接受单个文件:

title:

file:

Upload

const path = require(‘path’);

const sendToWormhole = require(‘stream-wormhole’);

const Controller = require(‘egg’).Controller;

class UploaderController extends Controller {

async upload() {

const ctx = this.ctx;

const stream = await ctx.getFileStream();

const name = ‘egg-multipart-test/’ + path.basename(stream.filename);

// 文件处理,上传到云存储等等

let result;

try {

result = await ctx.oss.put(name, stream);

} catch (err) {

// 必须将上传的文件流消费掉,要不然浏览器响应会卡死

await sendToWormhole(stream);

throw err;

}

ctx.body = {

url: result.url,

// 所有表单字段都能通过 stream.fields 获取到

fields: stream.fields,

};

}

}

module.exports = UploaderController;

要通过 ctx.getFileStream 便捷的获取到用户上传的文件,需要满足两个条件:

  • 只支持上传一个文件。

  • 上传文件必须在所有其他的 fields 后面,否则在拿到文件流时可能还获取不到 fields。

  1. 上传 / 接受多个文件:

如果要获取同时上传的多个文件,不能通过 ctx.getFileStream() 来获取,只能通过下面这种方式:

const sendToWormhole = require(‘stream-wormhole’);

const Controller = require(‘egg’).Controller;

class UploaderController extends Controller {

async upload() {

const ctx = this.ctx;

const parts = ctx.multipart();

let part;

// parts() 返回 promise 对象

while ((part = await parts()) != null) {

if (part.length) {

// 这是 busboy 的字段

console.log('field: ’ + part[0]);

console.log('value: ’ + part[1]);

console.log('valueTruncated: ’ + part[2]);

console.log('fieldnameTruncated: ’ + part[3]);

} else {

if (!part.filename) {

// 这时是用户没有选择文件就点击了上传(part 是 file stream,但是 part.filename 为空)

// 需要做出处理,例如给出错误提示消息

return;

}

// part 是上传的文件流

console.log('field: ’ + part.fieldname);

console.log('filename: ’ + part.filename);

console.log('encoding: ’ + part.e 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 ncoding);

console.log('mime: ’ + part.mime);

// 文件处理,上传到云存储等等

let result;

try {

result = await ctx.oss.put(‘egg-multipart-test/’ + part.filename, part);

} catch (err) {

// 必须将上传的文件流消费掉,要不然浏览器响应会卡死

await sendToWormhole(part);

throw err;

}

console.log(result);

}

}

console.log(‘and we are done parsing the form!’);

}

}

module.exports = UploaderController;

为了保证文件上传的安全,框架限制了支持的的文件格式,框架默认支持白名单如下:

// images

‘.jpg’, ‘.jpeg’, // image/jpeg

‘.png’, // image/png, image/x-png

‘.gif’, // image/gif

‘.bmp’, // image/bmp

‘.wbmp’, // image/vnd.wap.wbmp

‘.webp’,

‘.tif’,

‘.psd’,

// text

‘.svg’,

‘.js’, ‘.jsx’,

‘.json’,

‘.css’, ‘.less’,

‘.html’, ‘.htm’,

‘.xml’,

// tar

‘.zip’,

‘.gz’, ‘.tgz’, ‘.gzip’,

// video

‘.mp3’,

‘.mp4’,

‘.avi’,

用户可以通过在 config/config.default.js 中配置来新增支持的文件扩展名,或者重写整个白名单

  • 新增支持的文件扩展名

module.exports = {

multipart: {

fileExtensions: [ ‘.apk’ ] // 增加对 apk 扩展名的文件支持

},

};

  • 覆盖整个白名单
用Python玩转LQR控制:3行核心代码实现倒立摆稳定控制(附Jupyter Notebook) 本文通过Python实战演示了如何使用LQR算法实现倒立摆的稳定控制。文章以直观方式解释LQR原理,提供从系统建模、核心代码求解到参数调优的完整流程,并附有可运行的Jupyter Notebook代码。重点介绍了如何利用SciPy库快速计算最优反馈增益,并通过仿真验证控制效果,为运动控制实践提供了即学即用的指南。 阅读详情

相关推荐

Win11此电脑怎么放在桌面上?Win11此电脑如何显示在电脑桌面上?

相信用习惯Win10的用户都喜欢电脑电脑桌面上的此电脑,但是很多用户更新完Win11正式版以后,发现桌面只有回收站和Microsoft Edge图标,没有此电脑。那么,Win11此电脑要如何显示呢?下面小编为大家简单介绍一下操作方法!5、桌面图标设置窗口,点击勾选计算机,然后点击确定,桌面就可以显示此电脑图标了。1、桌面空白处,点击右键,在打开的菜单项中,选择显示设置;4、个性化 - 主题,相关设置下,点击桌面图标设置;3、右侧点击主题(安装、创建、管理);2、设置窗口,左侧点击个性化;

shengyin714959的博客 12万+

egg使用ctx.getFileStream进行文件上传

stream = await ctx.getFileStream(); stream.filename :文件名称, stream.fields:附加字段 页面: formData.append('width', width) formData.append('height', height) formData.append('type', "1") formData.append('filename', file) formData.append(‘filename’, fi.

qq_36154659的博客 2752

海地2013狗

可以那些修复2013海地狗写狗程序不能修复的狗

vue使用md编辑器和打印 egg使用ctx.getFileStream进行文件上传

vue使用富文本和打印 egg使用ctx.getFileStream进行文件上传

weixin_45086164的博客 569

十分钟带你上手egg,写自己的后端接口

此篇文章是基于的基础上写的,安装简单的接口你看一看这篇文章。这是自己写基于egg框架写的一个后台服务,有需要练习的小伙伴可以自行下载参考,注释都是很详细的,自己结合官网看是没有什么问题这是第二次使用node写后端接口,也是第一次使用egg,我发现这个后端写起来其实也不难,首先你先得吧框架结构以及基础对象搞清楚,这样写的接口你自己项目的用完全是没有问题的。......

LUZENG_SA的博客 2026

一文搞懂eggjs中上传文件

一、基本的配置 在eggjs中上传文件的官方文档 1、配置上传的路由 module.exports = (app) => { const { router, controller } = app; router.resources('file', '/api/v1/file', controller.file); }; 2、在config/config.default.js中配置上传的基本配置(可以参考官方文档) ... // 配置上传 config.mult

LAZKUQZA的博客 1149

使用egg编写上传图片的接口

Egg.js中编写上传图片的接口需要安装egg-multipart插件。egg-multipart是Egg.js提供的一个上传文件的插件,使用它可以方便地实现上传图片的功能。使用postman等工具测试上传图片的接口,上传成功后,返回的数据中应包含上传的图片文件名和路径。以上就是在Egg.js中实现上传图片的接口的步骤。

xiangxiang的博客 913

转载关于Python 和 egg 文件】

不会安装python的egg文件,在网上搜索了一下,被“蟒蛇蛋”这个词雷到了,记录下。 随着对python的逐渐使用,发现一些python组件是用一个包管理器发布的,今天搞了快一个小时,终于搞定了,这方面中文资料比较少,都是看英文资料。如果你以前没有包管理器,可能会摸不着头脑。不过只要理解了一些概念,几步简单的操作就搞定了,关键是对于你以后安装和管理python包很方便,而且如果你更进一步的

无限大地NLP_空木的专栏 1260

转载egg.js的文件上传

https://eggjs.org/zh-cn/basics/controller.html#%E8%8E%B7%E5%8F%96%E4%B8%8A%E4%BC%A0%E7%9A%84%E6%96%87%E4%BB%B6 获取上传的文件 请求 body 除了可以带参数之外,还可以发送文件,一般来说,浏览器上都是通过 Multipart/form-data 格式发送文件的,框架通过内置 Multipart 插件来支持获取用户上传的文件,我们为你提供了两种方式: File 模式: 如果你完全不知道 No

mus-z的博客 1645

egg.js入门教程视频文件(转载于cnode社区)

记得上篇博客我满怀欣喜的去搞富文本,结果撞的头破血流。 简直是惨不忍睹。后来我也说了,我的那个有比较严重的问题,后期会考虑重构。(第一版已经放弃了) 之后我说我会去看关于后端nodejs koa框架方面的东西。 这次呢我选择的框架eggjs,跳过了koa框架。(我以前用过express,写过很小的网站。) 一开始直接翻官方文档说实在看的头昏脑涨。之后逛cnode社区,发现有教程。教程很基...

海天酱油zz 1006

转载阿里开源框架Egg.js文档被告知侵权,原作者:难道我才是那个恶人?

????????关注后回复“进群”,拉你进程序员交流群????????来源丨InfoQhttps://mp.weixin.qq.com/s/eNPlVeJ3b9aqocj59j_jNQ作者 | 褚杏娟2018 年 4 月 5 日,阿里开源的企业级 Node.js 框架 Egg.js 核心开发者“天猪”在知乎上发布了一篇帖子《当 Egg 遇到 TypeScript,收获茶叶蛋一枚》。文章...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 543

转载egg,2024年最新web前端培训资料

对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

2401_84139624的博客 1048

转载】 扔鸡蛋问题详解(Egg Dropping Puzzle)

更详细的解答在:http://blog.csdn.net/joylnwang/article/details/6769160 传说中有一道Google面试题是这样的: 你有两个鸡蛋,它们有这样的特性:仅当比某层楼更高摔下时破碎,该层及更低的楼层则毫发无损。毫发无损意味着还可以再次摔下。现在你在一个100层高楼中,要求给出一种策略,用尽量少的实验次数确定这个特定的楼高。1楼就破和10

zhangmengjlu的专栏 949

转载:谷歌面试题之2 Egg Problem

为什么80%的码农都做不了架构师?>>> ...

weixin_34247299的博客 241

转载阿里开源项目 Egg.js 技术文档引发的“版权纠纷”,看宽松的 MIT 许可该如何用?...

|转载自:CSDN| 作者:苏宓、彭慧中| 编辑:周韵诗|设计:张千禧开源迅速发展的这两年,很多内部问题逐渐凸显出来,如安全、版权、协议使用等。近日,来自V2EX社区中一位开发者 @an168bang521 发布的一篇题为《想问下懂法律的老哥们,摘抄阿里开源软件 Egg.js 技术文档内容算不算侵权》的文章,引发开源届不少开发者的热议与关注,当项目团队成员发布的技术文...

开源社KAIYUANSHE的博客 221

Node.js中的egg入门、egg路由、egg控制器、egg服务、egg中间件

这里介绍一下框架中内置的一些基础对象,包括从 Koa 继承而来的 4 个对象 (Application, Context, Request, Response) 以及框架扩展的一些对象(Controller, Service, Helper, Config, Logger)

qq_51066068的博客 5129

egg-jwt egg jwt 使用

1,安装egg-jwt npm install egg-jwt --save 2,配置 config/plugin.ts import { EggPlugin } from 'egg'; const plugin: EggPlugin = { jwt: { enable: true, package: "egg-jwt" }, }; export defau...

Yangliwei的博客 1万+

Egg 中使用 Mongoose 以及 Egg 中的 model

一、Egg 中的 model app/model/** 用于放置领域模型,可选,由领域类相关插件约定。 Loader : Egg 在 Koa 的基础上进行增强最重要的就是基于一定的约定,根据功能差异将代码 放到不同的目录下管理,对整体团队的开发成本提升有着明显的效果。Loader 实现了这约定,并抽象了很多底层 API 可以进一步扩展。 Loader 还提供了 caseStyle 强制指定首字母大...

Missing 3224

egg.js中使用egg-mysql操作mysql数据库

1、在 egg 项目中安装 egg-mysql npm i egg-mysql --save 2、在 {app_root}/config/plugin.js 中启用 egg-mysql 插件: 'use strict'; /** @type Egg.EggPlugin */ module.exports = { //mysql mysql:{ enable:t...

yzwdzkn的博客 1万+

Egg egg-bin

本地开发调试Egg应用程序时需使用egg-bin模块 egg-bin是一个为便捷开发者在本地开发、调试、测试Egg应用程序的命令行开发工具,它集成了本地调试、单元测试、代码覆盖率等功能。 egg-bin是基于common-bin开发的,common-bin是一个封装的CLI开发工具(抽象命令工具),封装了诸如co、yargs模块并提供对async/generator特性的支持,内置helper、s...

JunChow 1809
上一篇: 【精品】好用的验证码工具类VerifyCodeUtils
下一篇: 【重识 HTML + CSS
m0_70058592
博客等级 码龄4年 2粉丝 · 20原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值