本地文件
学习使用 Slack API 调用来操作工作区中的文件。
我们可以使用 Slack API 调用定期上传和共享本地文件。
在本课程中,我们将查看以下端点:
1. `files.upload`:此端点用于上传或创建文件。 2. `files.list`:此端点用于列出团队、频道或用户上传的文件,并支持应用过滤条件。 3. `files.info`:此端点用于获取文件的详细信息。 4. `files.delete`:此端点用于删除文件。
上传文件
要上传文件,我们将访问 https://slack.com/api/files.upload 端点。首先,我们来了解如何使用 files.upload 端点上传文件。我们将使用 POST 请求调用此端点。
### 请求参数 `files.upload` 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。 |
| channels | string | 可选 | 以逗号分隔的频道名称或 ID 列表,文件将在此处分享。 |
| content | string | 可选 | 通过 POST 变量发送的文件内容。如果省略此参数,则必须提供 file。 |
| file | string | 可选 | 通过 multipart/form-data 发送的文件(在使用 POST 请求提交整个文件时)。如果省略此参数,则必须提交 content。 |
| filename | string | 可选 | 文件名称。 |
| filetype | string | 可选 | 文件类型标识符,例如 auto 或 python。 |
| initial_comment | string | 可选 | 在指定频道中引入该文件的消息文本。 |
| thread_ts | string | 可选 | 用于将文件作为回复上传到另一条消息的 ts 值。不能使用回复的 ts 值,而应使用其父级消息。 |
| title | string | 可选 | 文件的标题。 |
上传文件后,请检查应用程序已添加的 Slack 频道中是否出现该文件。
让我们调用 files.upload 端点。点击“运行”按钮,将 mytext.txt 文件上传至 Slack。
1import fetch from "node-fetch"; 2import { promises as fs } from "fs"; 3 4// 定义一个读取本地文件的函数 5async function readLocalFile(filename) { 6 try { 7 const data = await fs.readFile(filename, { encoding: "utf8" }); 8 return data; 9 } catch (err) { 10 console.log(err); 11 } 12} 13 14const url = new URL("https://slack.com/api/files.upload"); 15 16const headerParameters = { 17 Authorization: "Bearer {{TOKEN}}", 18 "Content-Type": "application/x-www-form-urlencoded", 19}; 20 21async function uploadFile() { 22 try { 23 const filename = "mytext.txt"; 24 const fileContent = await readLocalFile(filename); 25 26 const bodyParameters = new URLSearchParams({ 27 channels: "{{CHANNEL_ID}}", 28 content: fileContent, 29 filename: filename, 30 filetype: "txt", 31 }); 32 33 const options = { 34 method: "POST", 35 headers: headerParameters, 36 body: bodyParameters, 37 }; 38 39 const response = await fetch(url, options); 40 printResponse(response); 41 } catch (error) { 42 printError(error); 43 } 44} 45 46uploadFile();
让我们分析代码窗口中高亮的部分:
- 第 2 行:我们导入 JavaScript 的
fs模块。 - 第 5–12 行:我们定义了一个
readLocalFile函数,用于读取并返回本地文件的内容。 - 第 23–24 行:我们使用
readLocalFile函数读取mytext.txt文件的内容。 - 第 26–31 行:我们指定了必要的参数:
channels、content、filename和filetype。
### 响应字段
该端点的响应包含已上传文件的详细信息。
注意:请参阅相关课程以查看
file对象的详细信息。
获取所有文件列表
要获取所有文件的列表,我们访问 https://slack.com/api/files.list 端点。该端点将返回频道中所有已上传文件的列表。
### 请求参数 `files.list` 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。 |
| channel | string | 可选 | 此参数用于筛选特定频道中的文件,通过其 ID 指定。 |
| count | integer | 可选 | 每页返回的项目数量。 |
让我们调用 files.list 端点。点击“运行”按钮,获取频道中所有文件的列表。
1import fetch from "node-fetch"; 2 3const url = new URL("https://slack.com/api/files.list"); 4 5const headerParameters = { 6 Authorization: "Bearer {{TOKEN}}", 7 "Content-Type": "application/json; charset=UTF-8", 8}; 9 10const queryParameters = new URLSearchParams({ 11 channel: "{{CHANNEL_ID}}", 12}); 13 14const options = { 15 method: "GET", 16 headers: headerParameters, 17}; 18 19async function getFiles() { 20 try { 21 url.search = queryParameters; 22 const response = await fetch(url, options); 23 printResponse(response); 24 } catch (error) { 25 printError(error); 26 } 27} 28 29getFiles();
让我们分析代码窗口中高亮的部分:
- 第 3 行:我们指定了
files.list端点。 - 第 11 行:我们指定了要筛选的频道,仅返回上传到该频道的文件。
### 响应字段
响应包含特定频道中所有已上传文件的详细信息。
注意:请参阅相关课程以查看
files列表中每个元素的详细信息。
获取文件信息
要获取文件信息,我们访问 https://slack.com/api/files.info 端点。一旦获得文件 ID,即可使用 files.info 端点获取文件详情。
### 请求参数 `files.info` 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。 |
| file | string | 必需 | 通过提供文件 ID 来指定文件。 |
| count | string | 可选 | 每页返回的项目数量。 |
| cursor | string | 可选 | 用于“指向”下一页数据的字符字符串。通过将 cursor 参数设置为前一次请求响应元数据中返回的 next_cursor 值,实现对数据集合的分页。 |
| limit | integer | 可选 | 指示最多返回的项目数量。即使未到达列表末尾,也可能返回少于请求数量的项目。 |
| page | integer | 可选 | 要返回的结果页码。 |
让我们调用 files.info 端点。点击“运行”按钮,获取已上传文件的信息。
1import fetch from "node-fetch"; 2 3const url = new URL("https://slack.com/api/files.info"); 4 5const headerParameters = { 6 Authorization: "Bearer {{TOKEN}}", 7 "Content-Type": "application/json; charset=UTF-8", 8}; 9 10const queryParameters = new URLSearchParams({ 11 file: "{{FILE_ID}}", 12}); 13 14const options = { 15 method: "GET", 16 headers: headerParameters, 17}; 18 19async function getFileInfo() { 20 try { 21 url.search = queryParameters; 22 const response = await fetch(url, options); 23 printResponse(response); 24 } catch (error) { 25 printError(error); 26 } 27} 28 29getFileInfo();
让我们分析代码窗口中高亮的部分:
- 第 11 行:我们指定了
file参数。 - 第 21–22 行:我们提供查询参数并调用
files.info端点。
### 响应字段
响应包含文件的完整详细信息。
注意:请参阅相关课程以查看
file对象的详细信息。
删除文件
要删除文件,我们访问 https://slack.com/api/files.delete 端点。我们使用相同的文件 ID 将文件从工作区中删除。
### 请求参数 `files.delete` 端点的一些重要查询参数如下:
| 参数 | 类型 | 分类 | 描述 |
|---|---|---|---|
| token | token | 必需 | 认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。 |
| file | string | 必需 | 通过提供文件 ID 来指定文件。 |
让我们调用 files.delete 端点。点击“运行”按钮,删除我们在课程开始时上传的文件。
1import fetch from "node-fetch"; 2 3const url = new URL("https://slack.com/api/files.delete"); 4 5const headerParameters = { 6 Authorization: "Bearer {{TOKEN}}", 7 "Content-Type": "application/json; charset=UTF-8", 8}; 9 10const bodyParameters = JSON.stringify({ 11 channel: "{{CHANNEL_ID}}", 12 file: "{{FILE_ID}}", 13}); 14 15const options = { 16 method: "POST", 17 headers: headerParameters, 18 body: bodyParameters, 19}; 20 21async function deleteFile() { 22 try { 23 const response = await fetch(url, options); 24 printResponse(response); 25 } catch (error) { 26 printError(error); 27 } 28} 29 30deleteFile();
让我们分析代码窗口中高亮的部分:
- 第 10–13 行:我们指定了
channel和file的请求体参数。 - 第 23 行:我们调用了
files.delete端点。
### 响应字段
该端点的响应仅包含 ok 参数,表示请求是否成功。