求知道用 koa-body 怎么自定义上传文件名字

求知道用 koa-body 怎么自定义上传文件名字 想自定义上传文件名字

img

使用 koa-body 中间件可以方便地处理上传文件的请求体,包括文件的解析、存储等操作。在默认情况下,上传的文件名字是由客户端指定并在上传请求中携带的,因此如果你想自定义上传文件的名字,可以通过一些自定义的方式来实现。

下面是一个基于 koa-body 中间件自定义上传文件名字的示例:


```javascript
const Koa = require('koa');
const koaBody = require('koa-body');
const fs = require('fs');

const app = new Koa();

// 定义上传文件存储路径和文件名字的自定义函数
const storage = koaBody.diskStorage({
  destination: (ctx, file, cb) => {
    cb(null, './uploads'); // 上传文件存储路径
  },
  filename: (ctx, file, cb) => {
    const ext = file.originalname.split('.').pop();
    cb(null, `${Date.now()}.${ext}`); // 自定义上传文件名字
  }
});

// 使用 koaBody 中间件并传入自定义的上传文件存储函数
app.use(koaBody({ multipart: true, storage }));

app.use(async (ctx) => {
  // 获取上传文件的相关信息
  const file = ctx.request.files.file;
  const filePath = file.path;
  const fileName = file.name;
  const fileSize = fs.statSync(filePath).size;

  // 返回上传文件的相关信息
  ctx.body = {
    filename: fileName,
    size: fileSize
  };
});

app.listen(3000);



```
上面的示例代码中,我们通过在 formidable 的配置选项中添加 onFileBegin 回调函数来自定义上传文件名字。在 onFileBegin 函数中,我们可以生成自定义文件名字,并将其赋值给 file.path 属性,从而实现自定义上传文件名字的功能。

需要注意的是,在使用 koa-body 进行文件上传时,必须将 multipart 设置为 true,并将 formidable 配置对象传递给 koaBody 函数。同时,需要在 formidable 配置对象中设置 uploadDir 属性,指定上传文件的目录。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 看下这篇博客,也许你就懂了,链接:koa超卖解决之分布式锁
  • 除此之外, 这篇博客: koa-body 使用教程中的 其他参数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    koa-body 的基本参数

    参数名描述类型默认值
    patchNode将请求体打到原生 node.js 的ctx.reqBooleanfalse
    patchKoa将请求体打到 koa 的 ctx.request 中Booleantrue
    jsonLimitJSON 数据体的大小限制String / Integer1mb
    formLimit限制表单请求体的大小String / Integer56kb
    textLimit限制 text body 的大小String / Integer56kb
    encoding表单的默认编码Stringutf-8
    multipart是否支持 multipart-formdate 的表单Booleanfalse
    urlencoded是否支持 urlencoded 的表单Booleantrue
    text是否解析 text/plain 的表单Booleantrue
    json是否解析 json 请求体Booleantrue
    jsonStrict是否使用 json 严格模式,true 会只处理数组和对象Booleantrue
    formidable配置更多的关于 multipart 的选项Object{}
    onError错误处理Functionfunction(){}
    stict严格模式,启用后不会解析 GET, HEAD, DELETE 请求Booleantrue

    formidable 的相关配置参数

    参数名描述类型默认值
    maxFields限制字段的数量Integer1000
    maxFieldsSize限制字段的最大大小Integer2 * 1024 * 1024
    uploadDir文件上传的文件夹Stringos.tmpDir()
    keepExtensions保留原来的文件后缀Booleanfalse
    hash如果要计算文件的 hash,则可以选择 md5/sha1Stringfalse
    multipart是否支持多文件上传Booleantrue
    onFileBegin文件上传前的一些设置操作Functionfunction(name,file){}

     

     


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^