前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Koa2实现多并发文件上传

Koa2实现多并发文件上传

作者头像
微芒不朽
发布2024-07-08 12:47:15
990
发布2024-07-08 12:47:15
举报
文章被收录于专栏:前端进阶-詹躲躲

koa2批量上传文件

目前的是为了实现批量导入md文件,发布文章。这样就不用自己一篇一篇同步文章了。一次可以同步几千篇文章。

实现界面

内容

主要包含上传的文件标题,文件大小,上传状态。

代码语言:javascript
复制
      <el-upload ref="uploader" v-model:file-list="fileList" drag multiple :accept="accept" :maxSize="maxSize"
        :limit="999" :data="data" :show-file-list="false" :http-request="request" :before-upload="before"
        :on-progress="progress" :on-success="success" :on-error="error" @handleChange="handleChange">
        <slot name="uploader">
          <div class="el-upload__text">将文件拖到此处或 <em>点击选择文件上传</em></div>
        </slot>
        <template #tip>
          <div class="el-upload__tip">
            <p v-if="templateUrl" style="margin-top: 7px">
              <el-link :href="templateUrl" target="_blank" type="primary" :underline="false">下载导入模板</el-link>
            </p>
          </div>
        </template>
      </el-upload>

这个采用自定义上传

代码语言:javascript
复制
        request(param) {
            const data = new FormData()
            data.append(param.filename, param.file)
            for (const key in param.data) {
                data.append(key, param.data[key])
            }
            uploadFiles(data).then((res) => {
                var reader = new FileReader()
                reader.readAsText(param.file, 'UTF-8')
                reader.onload = function(e) {
                    var content = e.target.result
                    param.onSuccess(content)
                }
            }).catch((err) => {
                param.onError(err)
            })
        }

koa2实现接口uploadFiles,文件多线程上传文件

代码语言:javascript
复制
  async uploadFiles(ctx) {
    const files = ctx.request.files || {};
    if (!files || Object.keys(files).length === 0) {
      ctx.status = 400;
      ctx.body = "请选择的上传文件";
      return;
    }
    const uploadPromises = Object.values(files).map(async (file) => {
      const reader = fs.createReadStream(file.path);
      const stream = fs.createWriteStream(`uploads/${file.name}`);
      const content = fs.readFileSync(file.path, 'utf8');
      reader.pipe(stream);
      return new Promise((resolve, reject) => {
        reader.on("end", async () => {
          fs.unlinkSync(file.path); // Delete the temporary file
          resolve({ name: file.name, status: 'uploaded' });
        });
        //content为读取上传文件的内容
        //此处存入数据库中
        //数据库已经处理了转义字符存储的问题
        reader.on("error", (err) => {
          reject(err);
        });
      });
    });

    try {
      const data = await Promise.all(uploadPromises);
      ctx.body = {
        code: 0,
        data: data,
      };
    } catch (err) {
      ctx.code = -1;
      ctx.body = "文件上传失败";
    }
  }

处理md文件存储时,mysql存储特殊字符转义问题

代码语言:javascript
复制
  async insert(params, table) {
    let columns = "";
    let values = "";
    for (const key in params) {
      columns += `${key}, `;
      values += `${mysql.escape(params[key])}, `;
    }
    columns = columns.slice(0, -2);
    values = values.slice(0, -2);
    return await query(`INSERT INTO ${table} (${columns}) VALUES (${values})`);
  }

选中多个文件上传

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叫我詹躲躲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • koa2批量上传文件
  • 实现界面
  • 内容
  • koa2实现接口uploadFiles,文件多线程上传文件
  • 处理md文件存储时,mysql存储特殊字符转义问题
  • 选中多个文件上传
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档