为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 AdonisJS 上验证多部分文件?

如何在 AdonisJS 上验证多部分文件?

呼唤远方 2021-08-20 19:14:08
我正在使用Adonis.js最新版本但无法验证...已经尝试过request.multipart.file('avatar', {  types: ['jpeg', 'jpg', 'png'], // I already tried -> type: ['image'] types: ['image'],  size: "4mb"  }, async file => {    await Drive.put(key, file.stream)}).../Validators/changeAvatar.js'use strict'class UserChangeAvatar {  get rules() {    return {      avatar: 'required|file|file_ext:png,jpg,jpeg,svg'    }  }}module.exports = UserChangeAvatar没有任何作用,该代码可让您上传任何类型的文件,例如.pdf或.mp4Adonis.js 文档中也没有谈论它。套餐版本版本 4.1 "@adonisjs/framework": "^5.0.9"Node.js 和 npm 版本节点 - v10.15.0 NPM - 6.10.1
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

验证规则不适用于 adonis 上的分段文件上传。您需要进行手动验证。例如:


// Helper function

function fileStreamValidation(file, validationRules) {

  const validationErrors = []

  if (!RegExp(/^[0-9a-zA-Z_\-.]+$/).test(file._clientName)) {

    validationErrors.push(

      `${file._clientName}'s name should only contain alphanumeric, underscore, dot, hypen`

    )

  }

  if (validationRules.extnames && validationRules.extnames.length) {

    const [_, fileExtension] = file._clientName.split(/\.(?=[^.]+$)/)

    if (!validationRules.extnames.includes(fileExtension)) {

      validationErrors.push(`${file._clientName}'s extension is not acceptable`)

    }

  }

  if (validationRules.maxFileSizeInMb) {

    if (file.stream.byteCount > validationRules.maxFileSizeInMb * 1000000) {

      validationErrors.push(`${file._clientName}'s size exceeded limit`)

    }

  }

  return validationErrors

}


/* validation in controller */

const validationOptions = {

  extnames: ['in', 'out'],

  maxFileSizeInMb: parseInt(Env.get('MAX_FILE_SIZE_IN_MB'))

}

request.multipart.file('datasets[]', {}, async file => {

  const errors = fileStreamValidation(file, validationOptions)

})


查看完整回答
反对 回复 2021-08-20
  • 1 回答
  • 0 关注
  • 229 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号