====== 文件上传下载 ====== 更新时间:2021-12-31 该文档已不再维护,请看新版 3.X 文档。 新版文档地址:[[ccim:rest:message|消息管理]] ---- 环信使用 REST 的方式来实现语音和图片等文件的上传下载。同时,为了保证聊天文件的安全,我们的 API 保证了以下几点: * 只有 APP 的登录用户才能够上传文件。 * 在上传文件的时候可以选择是否限制访问权限。 * 如果选择限制的话,会在上传请求完成后返回一个 secret,只有知道这个 secret,并且是 APP 的注册用户,才能够下载文件。 * 如果选择不限制的话,则只要是 APP 的注册用户就能够下载。 * 如选择加secert限制的话,''消息回调(包含发送前回调和发送后回调)、历史消息这些功能中涉及下载文件时,都需要在下载url中拼接secert,才能正常下载文件''; * 拼接规则如下: {{url}}?share-secret={{secret}} ---- ====== REST API ====== 文件上传下载集成过程中,需要使用到的 REST API 文档详细说明,可以通过使用文档中嵌入的[[http://api-docs.easemob.com/|Easemob REST API]]进行在线测试。 ^名称^请求^描述^ |上传语音/图片文件|/{org_name}/{app_name}/chatfiles|上传语音/图片文件| |下载语音/图片文件|{org_name}/{app_name}/chatfiles/{filestream}|下载语音/图片文件| |下载缩略图|/{org_name}/{app_name}/chatfiles/{file_uuid}|下载缩略图| =====上传语音/图片文件===== **注意:**上传文件大小不能超过 10M,超过会上传失败。 所需要的 HTTP Header: * Authorization – 获取到的token * restrict-access – 是否限制访问权限。 **注意:**这个 API 并没有考虑这个属性的值,而是有这个属性即可。最后,需要使用 HTTP multipart/form-data 形式。 === HTTP Request === ^{{:im:server:basics:post.png?nolink&90|}}^**/{org_name}/{app_name}/chatfiles**^ === Request Headers === ^参数^说明^ |restrict-access|true| |Authorization|Bearer ${token}| === Response Body === 在返回值中查看entities字段包含的信息 ^参数^说明^ |uuid|文件唯一ID,指定是哪个文件,发送消息时需要用到| |type|文件类型| |share-secret|上传成功后返回,发送消息时需要用到| === 请求示例 === curl -X POST https://a1.easemob.com/easemob-demo/testapp/chatfiles -H 'Authorization: Bearer YWMtS1pRuFa-EemixAMhJgmGUAAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFp57yd7QBPGgDNLstNggrzgHV3JAbqbznTptqLhpG0fTOCaBFJZgduZA' -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' -H 'restrict-access: true' -F file=@/Users/test/9.2/Easemob/image/IMG_2953.JPG **注意:**上述请求示例中''-F file=@/Users/test/9.2/Easemob/image/IMG_2953.JPG'',为环信本地文件路径,使用时请替换为自己的文件路径,否则会请求失败。 === 可能返回的结果示例 === **返回值200,表示成功上传文件** { "action": "post", "application": "8be024f0-e978-11e8-b697-5d598d5f8402", "path": "/chatfiles", "uri": "https://a1.easemob.com/easemob-demo/testapp/chatfiles", "entities": [ { "uuid": "5fd74830-56be-11e9-822a-81ea50bb049d", "type": "chatfile", "share-secret": "X9dIOla-EemnFYUgtUZLGyqG9Y-S01eL_ysw27NqTV1_g7Yc" } ], "timestamp": 1554371126338, "duration": 0, "organization": "easemob-demo", "applicationName": "testapp" } **返回值401,未授权[无token、token错误、token过期]** { "error": "auth_bad_access_token", "timestamp": 1542348025595, "duration": 0, "exception": "org.apache.usergrid.rest.exceptions.SecurityException", "error_description": "Unable to authenticate due to corrupt access token" } 如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:450errorcode:45restastrict|接口限流说明]] [[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]] ---- =====下载语音/图片文件===== 这里需要注意的就是,需要在 HTTP header 中带上上面返回的 share-secret 和当前登录用户的 token 才能够下载,同时注意 header 中执行的 accept 的值需要设置成 application/octet-stream。 uuid 和 share-secret 在文件上传成功后会返回。 === HTTP Request === ^{{:im:server:basics:get.png?nolink&90|}}^**/{org_name}/{app_name}/chatfiles/{uuid}**^ === Request Headers === ^参数^说明^ |Content-Type|application/json| |Authorization|Bearer ${token}| |share-secret|share-secret| === 请求示例 === curl -X GET -H 'Accept: application/octet-stream' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'share-secret: f0Vr-uyyEeiHpHmsu53Togur4ngZYgyLkdfsZ4xo2Z0cSBnB' 'http://a1.easemob.com/easemob-demo/testapp/chatfiles/7f456bf0-ecb2-11e8-b630-777db304f26c' === 可能返回的结果示例 === **返回值200,表示下载文件成功** { //语音/图片文件信息 } **返回值401,未授权[无token、token错误、token过期]** { "error": "auth_bad_access_token", "timestamp": 1542349596366, "duration": 0, "exception": "org.apache.usergrid.rest.exceptions.SecurityException", "error_description": "Unable to authenticate due to corrupt access token" } 如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:450errorcode:45restastrict|接口限流说明]] [[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]] ---- =====下载缩略图===== 环信支持在服务器端自动的创建图片的缩略图。可以先下载缩略图,当用户有需求的时候,再下载大图。 这里和下载大图唯一不同的就是 header 中多了一个“thumbnail: true”,当服务器看到过来的请求的 header 中包括这个的时候,就会返回缩略图,否则返回原始大图。 === HTTP Request === ^{{:im:server:basics:get.png?nolink&90|}}^**/{org_name}/{app_name}/chatfiles/{file_uuid}**^ 需要在请求时对应填写{file_uuid},需要获取文件返回的 uuid 。 === Request Headers === ^参数^说明^ |Content-Type|application/json| |Authorization|Bearer ${token}| === 请求示例 === curl -X GET -H 'Accept: application/octet-stream' -H 'Authorization: Bearer YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw' -H 'share-secret: f0Vr-uyyEeiHpHmsu53Togur4ngZYgyLkdfsZ4xo2Z0cSBnB' -H 'thumbnail: true' 'http://a1.easemob.com/easemob-demo/testapp/chatfiles/7f456bf0-ecb2-11e8-b630-777db304f26c' === 可能返回的结果示例 === **返回值200,表示下载缩略图成功** { //缩略图信息 } **返回值401,未授权[无token、token错误、token过期]** { "error": "auth_bad_access_token", "timestamp": 1542350943210, "duration": 0, "exception": "org.apache.usergrid.rest.exceptions.SecurityException", "error_description": "Unable to authenticate due to corrupt access token" } 如果返回结果是429、503或者其他5xx,有可能代表该接口被限流了,请稍微暂停一下并重试。详见[[im:450errorcode:45restastrict|接口限流说明]] [[http://api-docs.easemob.com/|使用 Easemob REST API 在线测试]] ---- 上一页:[[im:server:basics:chatrecord|聊天记录]] 下一页:[[im:server:basics:conferencemanage|会议管理]]