文件模块 - 文件上传

优质
小牛编辑
136浏览
2023-12-01

上传流程图

  1. +-----------------+ +-----------------+ +-----------------+
  2. | Client/Browser | | FORM API | | 知晓云 |
  3. +-----------------+ +-----------------+ +-----------------+
  4. | | |
  5. +++ Request authorization +++
  6. |-|====================================>|-|
  7. |-| | |-|
  8. |-| Response authorization |-|
  9. |-|<====================================|-|
  10. +++ | +++
  11. | | |
  12. +++ Upload +++ +++
  13. |-|================>|-| |-|
  14. |-| |-| |-|
  15. |-| Response |-| |-|
  16. |-|<================|-| |-|
  17. +++ +++ +++
  18. | | |

使用知晓云开放 API 上传文件需要以下两个步骤:

1. 获取上传文件所需授权凭证和上传地址

接口

POST https://cloud.minapp.com/userve/v1/upload/

参数说明

Content-Type: application/json

参数类型必填说明
filenameStringN上传的文件名
categoriesStringN上传文件的所属分类,格式为文件分类的 ID 数组

返回参数

参数类型说明
idString上传的文件 ID
policyString文件上传配置
authorizationString文件上传凭证
file_linkString文件上传成功后的访问地址
upload_urlString上传文件的目标地址

代码示例

  1. var axios = require('axios').create({
  2. withCredentials: true
  3. })
  4. axios.post('https://cloud.minapp.com/userve/v1/upload/', {
  5. filename: 'crop.gif',
  6. categories: ['5a1ba7b708443e7fc5f2fb18']
  7. }).then(res => {
  8. console.log(res.data)
  9. })

返回示例

  1. {
  2. "policy": "eyJkYXRlIjogIldlZCwgMDYgRGVjIDIwMTcgMDM6MzI6MzMgR01UIiwgIm5vdGlmeS11cmwiOiAiaHR0cHM6Ly9zc28uaWZhbnIuY29tL2V4dGFwaS9oeWRyb2dlbi91cHl1bi9jYWxsYmFjay8yODcvNWEyNzY0ZDFmZmYxZDYxYWQwZWNhMjQ1LyIsICJidWNrZXQiOiAiY2xvdWQtbWluYXBwLTI4NyIsICJzYXZlLWtleSI6ICIxZU1RUmxrSndoZ2FNaUNnLmdpZiIsICJleHBpcmF0aW9uIjogMTUxMjUzMTQ1M30=",
  3. "upload_url": "https://v0.api.upyun.com/cloud-minapp-287",
  4. "file_link": "https://cloud-minapp-287.cloud.ifanrusercontent.com/1eMQRlkJwhgaMiCg.gif",
  5. "id": "5a2764d1fff1d61ad0eca245",
  6. "authorization": "UPYUN allenzhang:MzmYCcWVjrWoeovC4+tM5Bgwusg="
  7. }

状态码说明

200 获得授权凭证成功,400 参数错误(不支持上传的文件格式),404 找不到文件分类 ID

2. 使用上一步获取的授权凭证和上传地址,进行文件上传

接口

POST {UPLOAD_URL}

UPLOAD_URL 是调用上一步的接口所返回的字段 upload_url 的值,形如:

  1. https://v0.api.upyun.com/cloud-minapp-287

参数说明

Content-Type: multipart/form-data

参数类型必填说明
authorizationStringY授权凭证
fileStringY上传的文件流
policyStringY授权凭证

代码示例

  1. var axios = require('axios').create({
  2. withCredentials: true
  3. })
  4. let formData = new FormData()
  5. formData.append('file', fileObj)
  6. formData.append('policy', 'eyJkYXRlIjogIldlZCwgMDYgRGVjIDIwMTcgMDM6MzI6MzMgR01UIiwgIm5vdGlmeS11cmwiOiAiaHR0cHM6Ly9zc28uaWZhbnIuY29tL2V4dGFwaS9oeWRyb2dlbi91cHl1bi9jYWxsYmFjay8yODcvNWEyNzY0ZDFmZmYxZDYxYWQwZWNhMjQ1LyIsICJidWNrZXQiOiAiY2xvdWQtbWluYXBwLTI4NyIsICJzYXZlLWtleSI6ICIxZU1RUmxrSndoZ2FNaUNnLmdpZiIsICJleHBpcmF0aW9uIjogMTUxMjUzMTQ1M30')
  7. formData.append('authorization', 'UPYUN allenzhang:MzmYCcWVjrWoeovC4+tM5Bgwusg=')
  8. axios.post('https://v0.api.upyun.com/cloud-minapp-287', formData, {
  9. 'headers': {'Content-Type': 'multipart/form-data'},
  10. })

返回示例

  1. {
  2. "image-type": "GIF",
  3. "image-frames": 8,
  4. "image-height": 8,
  5. "code": 200,
  6. "file_size": 329,
  7. "image-width": 8,
  8. "url": "1eMQRlkJwhgaMiCg.gif",
  9. "time": 1512531154,
  10. "message": "ok",
  11. "mimetype": "image/gif"
  12. }

状态码说明

200 上传成功