💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ### egg 单文件上传 * [ ] 通过`ctx.getFileStream`便捷的获取到用户上传的文件,需要满足两个条件: * 只支持上传一个文件。 * 上传文件必须在所有其他的 fields 后面,否则在拿到文件流时可能还获取不到 fields。 ***** 文档:[https://eggjs.org/zh-cn/basics/controller.html](https://eggjs.org/zh-cn/basics/controller.html) 代码: ``` 'use strict'; const Controller = require('egg').Controller; const path = require('path') const fs = require('fs') const sendToWormhole = require('stream-wormhole'); class UserController extends Controller { /** * 上传用户头像 */ async upload() { const { ctx } = this // 读取表单提交的文件流 const stream = await ctx.getFileStream() // 获取上传的文件名 like.jpg dog.png const file_name = path.basename(stream.filename) // 拼接上传路径 const upload_path = 'app/public/admin/uploads/' + file_name // 创建一个可以写入的流 const writeStream = fs.createWriteStream(upload_path) let result; try { // 把读取到的表单信息流写入创建的可写流 result = await stream.pipe(writeStream) } catch (err) { // 上传失败销毁流 await sendToWormhole(stream) throw err } ctx.body = { url: upload_path, // 上传路径 fields: stream.fields // 所有表单字段都能通过 `stream.fields` 获取到 } } } module.exports = UserController; ``` ***** ### 使用 pump 插件上传 * [ ] 文档:https://www.npmjs.com/package/pump * [ ] 首先安装 npm install pump * [ ] 代码: ``` 'use strict'; const Controller = require('egg').Controller; const path = require('path') const fs = require('fs') const pump = require('pump') class UserController extends Controller { /** * 上传用户头像 */ async upload() { const { ctx } = this // 读取表单提交的文件流 const stream = await ctx.getFileStream() // 获取上传的文件名 like.jpg dog.png const file_name = path.basename(stream.filename) // 拼接上传路径 const upload_path = 'app/public/admin/uploads/' + file_name // 创建一个可以写入的流 const writeStream = fs.createWriteStream(upload_path) // 第一个参数读取流,第二个参数可写流, 上传失败会自动销毁流 await pump(stream, writeStream) ctx.body = { url: upload_path, // 上传路径 fields: stream.fields // 所有表单字段都能通过 `stream.fields` 获取到 } } } module.exports = UserController; ```