uni-app官方能不能给一个schema里file数据类型标准,即什么数据结构的json object会被认为是一个file

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app官方能不能给一个schema里file数据类型标准,即什么数据结构的json object会被认为是一个file

问题描述

由于<uni-file-picker>不够灵活或者说封装不能满足业务需求,所以自己写了上传组件,但是还想保留schema对文件这一字段类型的验证过滤,那怎样的json代码结构才会被schema系统认为它就符合一个file数据类型了,找了官方的文档并没有找到相关说明,只有如下一小段简短示例:

{
    "name": "filename.jpg",
    "extname": "jpg",
    "fileType": "image",
    "url": "https://xxxx", // 必填
    "size": 0, //单位是字节
    "image": { //图片扩展
        "width":10,//单位是像素
        "height":10
    },
    "video":{ //video和image不会同时存在。此处仅为列举所有数据规范
        "duration":123,//视频时长,单位是秒
        "poster":"https://xxx" //视频封面
    }
}

但是这一小段代码太简短了,<uni-file-picker>自动生成的json要比这复杂一点,官方也没有说这小段示例代码的数据结构就是判断是否为file数据类型的标准,而且还有一个问题,官方说fileMediaType只支持三种类型allimagevideo,但是小程序的fileMediaType支持四种类型allimagevideofile(除图片和视频外的所有文件),那么怎么做到兼容呢?


1 回复

在uni-app中,schema(模式)定义通常用于校验和描述数据结构。尽管uni-app官方文档可能没有直接提供一个关于file数据类型的标准schema定义,但我们可以根据常见的JSON Schema规范(如JSON Schema Draft 7)以及uni-app在处理文件时的实际数据结构来推测和定义一个合理的file数据类型。

在前端开发中,特别是涉及文件上传时,文件通常被封装为一个包含文件元数据和文件内容的对象。以下是一个可能的file数据类型的JSON Schema定义,它遵循JSON Schema Draft 7规范,并尝试模拟一个文件对象的结构:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "File Schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "The name of the file."
    },
    "size": {
      "type": "integer",
      "minimum": 0,
      "description": "The size of the file in bytes."
    },
    "type": {
      "type": "string",
      "description": "The MIME type of the file."
    },
    "lastModified": {
      "type": "string",
      "format": "date-time",
      "description": "The last modified date of the file."
    },
    "webkitRelativePath": {
      "type": "string",
      "nullable": true,
      "description": "The relative path of the file in the file system."
    },
    "arrayBuffer": {
      "type": "string",
      "format": "binary",
      "nullable": true,
      "description": "The base64 encoded content of the file. Note: This field may not be directly supported in JSON Schema and is included for conceptual completeness. In practice, file content would be handled separately."
    }
  },
  "required": ["name", "size", "type", "lastModified"],
  "additionalProperties": false
}

注意

  1. arrayBuffer字段在标准的JSON Schema中并不直接支持二进制数据。在实际应用中,文件内容通常会通过其他方式(如Multipart Form Data)进行传输,而不是直接嵌入JSON中。这里的arrayBuffer字段仅用于说明文件内容的概念性表示。
  2. 在实际应用中,文件对象可能会包含更多或更少的属性,具体取决于环境和需求。
  3. 验证文件内容的完整性(如通过哈希校验)通常是在文件传输过程中进行的,而不是通过JSON Schema来完成的。

希望这个示例能帮助你理解如何在JSON Schema中定义一个文件数据类型的结构。

回到顶部