文件操作

SDK 1.1.2 及以上版本

实例化一个 wx.BaaS.File 对象,以下操作都是在该对象上进行操作,如下进行实例化:

let MyFile = new wx.BaaS.File()

文件上传

MyFile.upload(fileParams, metaData)

fileParams 参数说明(必须)

参数类型必填说明
filePathStringY本地资源路径

metaData 参数说明(可选)

参数类型必填说明
categoryIDStringN要上传的文件分类 ID
categoryNameStringN要上传的文件分类名

请勿同时填写 categoryID 和 categoryName,默认只使用 categoryID

返回参数说明

res.data:

参数类型说明
statusString成功返回 'ok'
pathString上传后的文件地址
fileObject包含文件详细信息,详见以下

file 参数说明:

参数类型说明
cdn_pathString文件在 cdn 上的路径
created_atString文件上传时间
idObject文件 ID
mime_typeString文件媒体类型
nameString文件名
sizeNumber以字节为单位

示例代码

  1. wx.chooseImage({
  2. success: function(res) {
  3. let MyFile = new wx.BaaS.File()
  4. let fileParams = {filePath: res.tempFilePaths[0]}
  5. let metaData = {categoryName: 'SDK'}
  6. MyFile.upload(fileParams, metaData).then(res => {
  7. /*
  8. * 注: 只要是服务器有响应的情况都会进入 success, 即便是 4xx,5xx 都会进入这里
  9. * 如果上传成功则会返回资源远程地址,如果上传失败则会返回失败信息
  10. */
  11. let data = res.data // res.data 为 Object 类型
  12. }, err => {
  13. // HError 对象
  14. })
  15. }
  16. })

HError 对象结构请参考错误码和 HError 对象

使用 wx.uploadFile 以及 SDK v.1.1.2 之前版本的 wx.BaaS.uploadFile 返回的 res.data 是 json string 类型,而这里的 res.data 是 Object 类型,因此不需要再做类型转换了

监听上传进度变化事件和中断上传任务 (SDK >= 1.8.0)

在 1.1.2 版本的基础上,1.8.0 版本中增加了对 UploadTask 的支持, upload API 返回的 Promise 对象上增加了 onProgressUpdateabort 方法,使文件上传增加了以下两个特性:

  • 监听上传进度:onProgressUpdate(callback)
  • 中断上传任务:abort()

callback 接收一个对象类型的参数,其结构如下:

参数类型说明
progressNumber上传进度百分比
totalBytesSentNumber已经上传的数据长度,单位 Bytes
totalBytesExpectedToSendNumber预期需要上传的数据总长度,单位 Bytes

示例代码

  1. wx.chooseImage({
  2. success: function(res) {
  3. let MyFile = new wx.BaaS.File()
  4. let fileParams = {filePath: res.tempFilePaths[0]}
  5. let metaData = {categoryName: 'SDK'}
  6. // upload API 返回一个 Promise,1.8.0 后返回值增加了 onProgressUpdate 和 abort 方法
  7. let uploadTask = MyFile.upload(fileParams, metaData)
  8. // 文件成功上传的回调
  9. uploadTask.then(res=>{
  10. })
  11. // 监听上传进度
  12. uploadTask.onProgressUpdate(e => {
  13. console.log(e)
  14. })
  15. // 600 毫秒后中断上传
  16. setTimeout(()=> uploadTask.abort(), 600)
  17. }
  18. })

onProgressUpdate 接收参数示例

  1. {
  2. "progress":80,
  3. "totalBytesSent":1507328,
  4. "totalBytesExpectedToSend":1883803
  5. }

file 字段可用于含有 file 类型的数据表的数据操作,详细见 新增数据项

获取文件详情

MyFile.get(fileID)

参数说明

参数类型必填说明
fileIDStringY文件 id

返回参数说明

res.data:

参数类型说明
categoryObject包含文件分类信息,详见以下
created_atString文件上传时间
idObject文件 ID
mime_typeString文件媒体类型
nameString文件名
pathString文件在 cdn 上的路径
sizeNumber以字节为单位

category 参数说明:

参数类型说明
idString分类 ID
nameString分类名

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. MyFile.get('5a2fe93308443e313a428c4f').then((res) => {
  3. // success
  4. }, err => {
  5. // HError 对象
  6. })

HError 对象结构请参考错误码和 HError 对象

返回示例

  1. {
  2. "category": {
  3. "id": "5a2fe91508443e3123dbe1cb",
  4. "name": "科技"
  5. },
  6. "created_at": 1507822469,
  7. "id": "5a2fe93308443e313a428c4f",
  8. "mime_type": "image/png",
  9. "name": "sdk-test-minapp2.png",
  10. "path": "https://cloud-minapp-7894.cloud.ifanrusercontent.com/1eOledhCbvjgaCSE.png",
  11. "size": 3879
  12. }

删除文件

MyFile.delete(fileID)

参数说明

参数类型必填说明
fileIDString or String ArrayY文件 id (可为数组)

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. MyFile.delete('5a2fe93308443e313a428c4f').then()
  3. MyFile.delete(['5a2fe93308443e313a428c4c', '5a2fe93308443e313a428c4d']).then()

删除单个文件,如果权限不足,会返回 401;删除多个文件,如果权限不足,则直接跳过该文件

查询,获取文件列表

文件查询与数据表查询方法一致,但只支持以下指定字段的筛选

支持字段类型说明
idString文件 id
nameString文件名
sizeInteger文件大小,以字节为单位
category_idString文件分类 id
category_nameString文件分类名
created_atInteger创建时间 (格式为 unix 时间戳)

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. // 查找所有文件
  3. MyFile.find()
  4. let query = new wx.BaaS.Query()
  5. // 查询某一文件分类下的所有文件
  6. query.compare('category_name', '=', categoryName)
  7. // 查询文件名包含指定字符串的文件
  8. query.contains('name', substr)
  9. MyFile.setQuery(query).find()
  1. let MyFile = new wx.BaaS.File()
  2. // 查找所有文件
  3. MyFile.find()
  4. // 按创建时间范围查询: 2018年10月24日17时10分57秒 至今上传的文件
  5. let query = wx.BaaS.Query.and(new wx.BaaS.Query().compare('created_at', '<=', Math.ceil(Date.now() / 1000)), new wx.BaaS.Query().compare('created_at', '>=', 1540372257))
  6. MyFile.setQuery(query).find()

排序

文件查询排序与数据表排序方法一致,但只支持对以下指定字段进行排序

支持字段类型说明
nameString文件名
sizeNumber文件大小,以字节为单位
created_atNumber文件上传时间

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. MyFile.orderBy('-created_at').find().then()

分页

文件查询排序与数据表分页方法一致

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. MyFile.limit(10).offset(5).find().then()

返回示例

成功时 res 结构如下

  1. {
  2. "meta": {
  3. "limit": 20,
  4. "next": "/dserve/v1.3/uploaded-file/?limit=20&offset=20&where=%7B%22%24and%22%3A%5B%7B%22category_name%22%3A%7B%22%24eq%22%3A%22%E5%9B%BE%E7%89%87%22%7D%7D%5D%7D",
  5. "offset": 0,
  6. "previous": null,
  7. "total_count": 36
  8. },
  9. "objects": [{
  10. "category": {"id": "5b73f36f2a4f56246e76b7b3", "name": "图片"},
  11. "created_at": 1534823603,
  12. "id": "5b7b8cb3839c611ab4eb2599",
  13. "mime_type": "image/jpeg",
  14. "name": "wxc6b86e382a1e3294.o6zAJs5dCuYRqqJOq0MwNPlGiFVM.CGLDGRT03IsI7fa51717abe74ed34e0c9cc77dbe7079.jpg",
  15. "path": "https://cloud-minapp-11033.cloud.ifanrusercontent.com/1frxjPBNFAOrQtOS.jpg",
  16. "size": 11189
  17. }]
  18. }

图片云处理

利用 CDN 图片云处理,可以快速便捷地完成图片缩放、裁切、打水印等操作,示例如下:

  1. // 缩放图片至 400x400
  2. https://cloud-minapp-7894.cloud.ifanrusercontent.com/1eRuaPvwdleauqyZ.jpg!/both/400x400
  3. // 在图片右下角添加 “知晓云” 文字水印
  4. https://cloud-minapp-7894.cloud.ifanrusercontent.com/1eiuEUuISgOstoVZ.png!/watermark/align/southeast/text/55+l5pmT5LqRCg==

具体用法和更多功能可查看文档:如何通过图片 URL 进行图片云处理?

视频截图

SDK 版本要求 >= 1.16.0

MyFile.genVideoSnapshot(params)

params参数说明

参数类型必填说明
sourceStringY视频文件的 id
save_asStringY截图保存的文件名
pointStringY截图时间格式,格式:HH:MM:SS
category_idStringN文件所属类别 ID
random_file_linkBooleanN是否使用随机字符串作为文件的下载地址,不随机可能会覆盖之前的文件,默认为 true
sizeStringN截图尺寸,格式为 宽 x 高,默认是视频尺寸
formatStringN截图格式,可选值为 jpg,png, webp, 默认根据 save_as 的后缀生成

返回参数说明

res:

参数类型说明
created_atInteger创建时间 (格式为 unix 时间戳)
pathString路径
created_byInteger创建者 id
mime_typeStringmime_type 类型
media_typeString媒体类型
sizeInteger文件大小
nameString文件名
statusString文件状态
referenceString引用
cdn_pathStringcdn 中保存的路径
updated_atInteger更新时间 (格式为 unix 时间戳)
categoriesString文件所属类别
_idString本条记录 ID

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. let params = {
  3. "source": "xxxxxxxxxx",
  4. "save_as": "hello.png",
  5. "point": "00:00:10",
  6. "category_id": "5c18bc794e1e8d20dbfcddcc",
  7. "random_file_link": false
  8. }
  9. MyFile.genVideoSnapshot(params).then((res) => {
  10. // success
  11. }, err => {
  12. // HError 对象
  13. })

HError 对象结构请参考错误码和 HError 对象

返回示例

  1. {
  2. "created_at": 1547461561,
  3. "path": null,
  4. "created_by_id": 16042162,
  5. "mime_type": "image/png",
  6. "media_type": "image",
  7. "size": 99391,
  8. "name": "1gizRRuY71ZUcSZX.png",
  9. "status": "success",
  10. "reference": "",
  11. "cdn_path": "1gizRRRdklnf7gCD.png",
  12. "updated_at": 1547461561,
  13. "categories": [],
  14. "_id": "5c3c63b9d1606e0b3fc7acb7"
  15. }

M3U8 视频拼接

SDK 版本要求 >= 1.16.0

MyFile.videoConcat(params)

params参数说明

参数类型必填说明
m3u8sArrayY视频文件的 id 列表,按提交的顺序进行拼接
save_asStringY截图保存的文件名
category_idStringN文件所属类别 ID
random_file_linkBooleanN是否使用随机字符串作为文件的下载地址,不随机可能会覆盖之前的文件,默认为 true

返回参数说明

res:

参数类型说明
created_atInteger创建时间 (格式为 unix 时间戳)
pathString路径
created_byInteger创建者 id
mime_typeStringmime_type 类型
media_typeString媒体类型
sizeInteger文件大小
nameString文件名
statusString文件状态
referenceString引用
cdn_pathStringcdn 中保存的路径
updated_atInteger更新时间 (格式为 unix 时间戳)
categoriesString文件所属类别
_idString本条记录 ID

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. let params = {
  3. "m3u8s": ["xxxxxxxxxx", "xxxxxxxxxx"],
  4. "save_as": "hello.m3u8",
  5. "category_id": "5c18bc794e1e8d20dbfcddcc",
  6. "random_file_link": false,
  7. }
  8. MyFile.videoConcat(params).then((res) => {
  9. // success
  10. }, err => {
  11. // HError 对象
  12. })

HError 对象结构请参考错误码和 HError 对象

返回示例

  1. {
  2. "created_at": 1547461561,
  3. "path": null,
  4. "created_by_id": 16042162,
  5. "mime_type": "",
  6. "media_type": "",
  7. "size": "",
  8. "name": "hello.m3u8",
  9. "status": "pengding",
  10. "reference": "",
  11. "cdn_path": "1gizRRRdklnf7gCD.m3u8",
  12. "updated_at": 1547461561,
  13. "categories": [],
  14. "_id": "5c3c63b9d1606e0b3fc7acb7"
  15. }

M3U8 视频剪辑

SDK 版本要求 >= 1.16.0

MyFile.videoClip(params)

params参数说明

参数类型必填说明
m3u8StringY视频文件的 id
save_asStringY截图保存的文件名
category_idStringN文件所属类别 ID
random_file_linkBooleanN是否使用随机字符串作为文件的下载地址,不随机可能会覆盖之前的文件,默认为 true
includeArrayN包含某段内容的开始结束时间,单位是秒。当 index 为 false 时,为开始结束分片序号
excludeArrayN不包含某段内容的开始结束时间,单位是秒。当 index 为 false 时,为开始结束分片序号
indexBooleanNinclude 或者 exclude 中的值是否为 ts 分片序号,默认为 false

返回参数说明

res:

参数类型说明
created_atInteger创建时间 (格式为 unix 时间戳)
pathString路径
created_byInteger创建者 id
mime_typeStringmime_type 类型
media_typeString媒体类型
sizeInteger文件大小
nameString文件名
statusString文件状态
referenceString引用
cdn_pathStringcdn 中保存的路径
updated_atInteger更新时间 (格式为 unix 时间戳)
categoriesString文件所属类别
_idString本条记录 ID

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. let params = {
  3. "m3u8": "xxxxxxxxxx",
  4. "include": [0, 20],
  5. "save_as": "0s_20s.m3u8",
  6. "category_id": "5c18bc794e1e8d20dbfcddcc",
  7. "random_file_link": false
  8. }
  9. MyFile.videoClip(params).then((res) => {
  10. // success
  11. }, err => {
  12. // HError 对象
  13. })

HError 对象结构请参考错误码和 HError 对象

返回示例

  1. {
  2. "created_at": 1547461561,
  3. "path": null,
  4. "created_by_id": 16042162,
  5. "mime_type": "",
  6. "media_type": "",
  7. "size": "",
  8. "name": "hello.m3u8",
  9. "status": "pending",
  10. "reference": "",
  11. "cdn_path": "1gizRRRdklnf7gCD.m3u8",
  12. "updated_at": 1547461561,
  13. "categories": [],
  14. "_id": "5c3c63b9d1606e0b3fc7acb7"
  15. }

M3U8 时长和分片信息

SDK 版本要求 >= 1.16.0

MyFile.videoMeta(params)

params参数说明

参数类型必填说明
m3u8StringY视频文件的 id

返回参数说明

res:

参数类型说明
status_codeInteger状态码
messageString返回信息
metaObject详见以下

meta 参数说明:

参数类型说明
duartionNumberm3u8 时长
pointsArray时间点

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. let params = {
  3. "m3u8": "xxxxxxxxxx"
  4. }
  5. MyFile.videoMeta(params).then((res) => {
  6. // success
  7. }, err => {
  8. // HError 对象
  9. })

HError 对象结构请参考错误码和 HError 对象

返回示例

  1. {
  2. "status_code": 200,
  3. "message": "ok",
  4. "meta": {
  5. "duration": 2850.2974559999984,
  6. "points": [
  7. 11.277933,
  8. 23.7237,
  9. 34.6346,
  10. 42.008632999999996,
  11. 50.483765999999996,
  12. 64.764699,
  13. 70.80406599999999,
  14. 82.31556599999999,
  15. 92.892799,
  16. 100.200099,
  17. 114.74796599999999,
  18. 123.92379899999999,
  19. 131.09763199999998,
  20. 140.97416499999997,
  21. 158.32483199999996,
  22. 160.05989899999994,
  23. 172.70586599999996,
  24. 181.04753299999996,
  25. 191.79159999999996
  26. ]
  27. }
  28. }

音视频的元信息

SDK 版本要求 >= 1.16.0

MyFile.videoAudioMeta(params)

params参数说明

参数类型必填说明
sourceStringY文件的 id

返回参数说明

res:

参数类型说明
formatObject音视频格式信息,详见以下
streamsArraystream 列表,详见以下

format 参数说明:

参数类型说明
bitrateInteger比特率
durationNumber时长
formatString容器格式
fullnameString容器格式全称

streams 参数说明:

参数类型说明
indexInteger表示第几路流
typeString一般情况下, video 或 audio
bitrateInteger流码率
codecString流编码
codec_descString流编码说明
durationNumber流时长
video_fpsNumber(视频流)视频帧数
video_heightInteger(视频流)视频高度
video_widthInteger(视频流)视频宽度
audio_channelsInteger(音频流)音频通道数
audio_samplerateInteger(音频流)音频采样率

示例代码

  1. let MyFile = new wx.BaaS.File()
  2. let params = {
  3. "source": "xxxxxxxxxx"
  4. }
  5. MyFile.videoAudioMeta(params).then((res) => {
  6. // success
  7. }, err => {
  8. // HError 对象
  9. })

HError 对象结构请参考错误码和 HError 对象

返回示例

  1. {
  2. "streams": [
  3. {
  4. "index": 0,
  5. "type": "video",
  6. "video_fps": 25,
  7. "video_height": 236,
  8. "video_width": 426,
  9. "codec_desc": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
  10. "codec": "h264",
  11. "bitrate": 99608,
  12. "duration": 184.8,
  13. "metadata": {
  14. "handler_name": "VideoHandler",
  15. "language": "und"
  16. }
  17. },
  18. {
  19. "index": 1,
  20. "type": "audio",
  21. "audio_channels": 2,
  22. "audio_samplerate": 44100,
  23. "codec_desc": "AAC (Advanced Audio Coding)",
  24. "codec": "aac",
  25. "bitrate": 48005,
  26. "duration": 184.855011,
  27. "metadata": {
  28. "handler_name": "SoundHandler",
  29. "language": "und"
  30. }
  31. }
  32. ],
  33. "format": {
  34. "duration": 184.902,
  35. "fullname": "QuickTime / MOV",
  36. "bitrate": 154062,
  37. "filesize": 3560797,
  38. "format": "mov,mp4,m4a,3gp,3g2,mj2"
  39. }
  40. }

SDK 1.1.2 以下版本

文件上传

wx.BaaS.uploadFile(fileParams)

fileParams 参数说明

参数类型必填说明
filePathStringY本地资源路径

返回参数说明

这里效仿微信的 wx.uploadFile 接口,放回 json string 的 data,经过 JSON parse 后的数据结构如下:

参数类型说明
statusString成功返回 'ok'
pathString上传后的文件地址
fileObject包含文件详细信息,详见以下

file 字段只在 SDK version >= v1.1.1 中出现

file 参数说明:

参数类型说明
cdn_pathString文件在 cdn 上的路径
created_atString文件上传时间
idObject文件 ID
mime_typeString文件媒体类型
nameString文件名
sizeNumber以字节为单位

file 可用于含有 file 类型的数据表的数据操作,详细见 新增数据记录

示例代码

  1. wx.chooseImage({
  2. success: function(res) {
  3. let fileParams = {filePath: res.tempFilePaths[0]}
  4. wx.BaaS.uploadFile(fileParams).then(res => {
  5. /*
  6. * 注: 只要是服务器有响应的情况都会进入 success, 即便是 4xx,5xx 都会进入这里
  7. * 如果上传成功则会返回资源远程地址,如果上传失败则会返回失败信息
  8. */
  9. let data = JSON.parse(res.data) // res.data 为 JSON String 类型
  10. }, err => {
  11. // HError 对象
  12. })
  13. }
  14. })

HError 对象结构请参考错误码和 HError 对象

返回示例

JSON.parse(res.data)

  1. {
  2. "status": "ok",
  3. "path": "https://cloud-minapp-1131.cloud.ifanrusercontent.com/1e2fVFaWoaoAZPyr.svg",
  4. "file": {
  5. "cdn_path": "1e2fVFaWoaoAZPyr.svg",
  6. "created_at": 1507822469,
  7. "id": "59df8b852ab80e3656cf8783",
  8. "mime_type": "text/plain; charset=utf-8",
  9. "name": "tmp_262601706o6zAJs-pmaywKzqHIvzwU97rtiGIe4dd39171563993cf10b12bae2ac30ec.svg",
  10. "size": 3879
  11. }
  12. }

微信开发者工具录音结束后生成的是 base64 格式文本文件,而在真机上生成的是正常的 buffer。如果在开发者工具里上传录音文件,实际上传的会是一个 base64 格式的文本文件。因此,如果你在使用知晓云上传录音文件,请在真机上调试。该问题微信团队已知,并在修复当中。