Logo
Section 1 / 2

本地文件

学习使用 Slack API 调用来操作工作区中的文件。

导入

本地文件

学习使用 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` 端点的一些重要查询参数如下:

参数类型分类描述
tokentoken必需认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。
channelsstring可选以逗号分隔的频道名称或 ID 列表,文件将在此处分享。
contentstring可选通过 POST 变量发送的文件内容。如果省略此参数,则必须提供 file。
filestring可选通过 multipart/form-data 发送的文件(在使用 POST 请求提交整个文件时)。如果省略此参数,则必须提交 content。
filenamestring可选文件名称。
filetypestring可选文件类型标识符,例如 auto 或 python。
initial_commentstring可选在指定频道中引入该文件的消息文本。
thread_tsstring可选用于将文件作为回复上传到另一条消息的 ts 值。不能使用回复的 ts 值,而应使用其父级消息。
titlestring可选文件的标题。

上传文件后,请检查应用程序已添加的 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` 端点的一些重要查询参数如下:

参数类型分类描述
tokentoken必需认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。
channelstring可选此参数用于筛选特定频道中的文件,通过其 ID 指定。
countinteger可选每页返回的项目数量。

让我们调用 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` 端点的一些重要查询参数如下:

参数类型分类描述
tokentoken必需认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。
filestring必需通过提供文件 ID 来指定文件。
countstring可选每页返回的项目数量。
cursorstring可选用于“指向”下一页数据的字符字符串。通过将 cursor 参数设置为前一次请求响应元数据中返回的 next_cursor 值,实现对数据集合的分页。
limitinteger可选指示最多返回的项目数量。即使未到达列表末尾,也可能返回少于请求数量的项目。
pageinteger可选要返回的结果页码。

让我们调用 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` 端点的一些重要查询参数如下:

参数类型分类描述
tokentoken必需认证令牌携带了控制不同 Slack 应用和 API 使用权限所需的范围。通常通过 HTTP Authorization 头或 POST 参数传递。
filestring必需通过提供文件 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 参数,表示请求是否成功。

使用应用程序进行对话

远程文件