在 Slack 上发布带有附加文件的消息

2024-04-14

我正在用 C# 编写一个简单的控制台应用程序来与 Slack.com 进行通信。 我通过他们的 WebApi 执行此操作。 目前我知道如何发布消息(带有附件、彩色、链接、用户等)并将文件发送到服务器。

如果您以正常方式发送文件(键入文本框左侧的“上传文件”),该文件将显示在主对话窗口中。但是如何通过 WebAPI 实现同样的事情呢?目前,发送文件后,我可以在右侧面板中看到它,其中仅列出了所有文件。

还有第二个问题:是否可以更改消息中文本的颜色(附件中没有“行”)?

这是通过发送文件后的响应https://slack.com/api/files.upload https://slack.com/api/files.upload

{
    "ok": true,
    "file": {
        "id": "F04EX4***",
        "created": 1429279966,
        "timestamp": 1429279966,
        "name": "Testing.txt",
        "title": "Testing",
        "mimetype": "text\/plain",
        "filetype": "text",
        "pretty_type": "Plain Text",
        "user": "U*********",
        "editable": true,
        "size": 28,
        "mode": "snippet",
        "is_external": false,
        "external_type": "",
        "is_public": false,
        "public_url_shared": false,
        "url": "https:\/\/slack-files.com\/files-pub\/T*******\
/testing.txt",
        "url_download": "https:\/\/slack-files.com\/files-pub\/T************\
/download\/testing.txt",
        "url_private": "https:\/\/files.slack.com\/files-pri\/T*******\
/testing.txt",
        "url_private_download": "https:\/\/files.slack.com\/files-pri\/T**********\
 /download\/testing.txt",
        "permalink": "https:\/\/******.slack.com\/files\/******\
/F0******\/testing.txt",
        "permalink_public": "https:\/\/slack-files.com\/********",
        "edit_link": "https:\/\/******.slack.com\/files\/****\/F******\/testing.txt\/edit",
        "preview": "This is a test file number2.",
        "preview_highlight": "<div class=\
"sssh-code\"><div class=\"sssh-line\"><pre>This is a test file number2.<\/pre><\/div>\n
<\/div>",
        "lines": 1,
        "lines_more": 0,
        "channels": [],
        "groups": [],
        "ims": [],
        "comments_count": 0
    }
}

抱歉,我不知道如何很好地格式化它。

“is_external”和“is_public”都是假的,也许这就是原因 - 但我怎样才能将它们设置为“true”?

->>感谢您的编辑! :) 这是我正在使用的整个功能:

public static void SlackSendFile()
    {
        FileStream str = File.OpenRead(@"C:\Users\Eru\Desktop\Testing.txt");
        byte[] fBytes = new byte[str.Length];
        str.Read(fBytes, 0, fBytes.Length);
        str.Close();

        var webClient = new WebClient();
        string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
        webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
        var fileData = webClient.Encoding.GetString(fBytes);
        var package = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", boundary, "Testing.txt", "multipart/form-data", fileData);

        var nfile = webClient.Encoding.GetBytes(package);
        string url = "https://slack.com/api/files.upload?token=" + Token + "&content=" + nfile + "&channels=[" + Channel + "]";

        byte[] resp = webClient.UploadData(url, "POST", nfile);

        var k = System.Text.Encoding.Default.GetString(resp);
        Console.WriteLine(k);
        Console.ReadKey();
    }

编辑1: 在这一行中:

 byte[] resp = webClient.UploadData(url, "POST", nfile);

网址是:

 https://slack.com/api/files.upload?token=*********&content=System.Byte[]&channels=[%23*****]

然后我传递字节数组。

EDIT:

我已经解决了这个问题。问题是频道应该是频道的 ID,而不是频道的名称...愚蠢的错误:(


您好,这里有一个 RestSharp 的干净示例

public void UploadFile(string token, string filePath, string channel)
{
    var client = new RestClient("https://slack.com");

    var request = new RestRequest("api/files.upload", Method.POST);
    request.AddParameter("token", token);
    request.AddParameter("channels", channel);

    var fileInfo = new FileInfo(filePath);
    request.AddFile("file", File.ReadAllBytes(filePath), fileInfo.Name, contentType:"multipart/form-data");

    //Execute the request
    var response = client.Execute(request);
    var content = response.Content;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Slack 上发布带有附加文件的消息 的相关文章

随机推荐

  • 如何按日期在 R 中对大型数据框 (ffdf) 进行子集化?

    我正在尝试按日期对 FFDF 进行子集化 下面 我使用普通数据框成功创建了这样的子集 但我需要一些帮助才能将其应用到 FFDF 我的尝试以及错误消息都列在代码注释中 提前谢谢了 Create a normal data frame in p
  • 如何保持片段视图状态?

    我对碎片系统有疑问 我有两个片段 例如A and B 如果我搬家A to B Navigation findNavController v navigate R id B Now A片段 onDestroyView 被称为我知道这是正常的
  • 使用 Imagick 将图像从 RGB 转换为 CMYK

    我正在尝试将 RGB 图像转换为 CMYK 因为它们需要打印 我正在使用这段代码
  • JavaScript 中 /// 是什么意思?

    双正斜杠 是 JavaScript 中的注释 但是三重正斜杠是什么意思 意思是 我问的原因是当我删除具有以下内容的行时代码会中断 这让我相信 不是评论 可能是一个参考指令 https stackoverflow com questions
  • 使用 Bluebird 进行 Mongoose 承诺的正确方法是什么?

    我一直在阅读文档和文章 每个人似乎都描述了一起使用 Mongoose 和 Bluebird 的不同方式 甚至 Mongoose 官方文档说了些什么 http mongoosejs com docs promises html蓝鸟文档说另一件
  • BOOST_LIKELY 和 __builtin_expect 仍然相关吗?

    我明白所解释的内容here https stackoverflow com questions 7346929 why do we use builtin expect when a straightforward way is to us
  • ListBox MVVM 中的清除选择

    在 MVVM Silverlight 应用程序中 用户可以在 TextBox 中输入文本 并且 ListBox 内容会相应更改 例如 如果用户输入 TV 列表框将填充所有可用的电视品牌 并且用户可以从列表框和列表框条目中选择产品 接下来 如
  • 在运行 ActionEvent 之前 GUI 不会在视觉上更新

    为了详细说明一下 我有一个如下所示的 GUI 然后我在 确定 按钮上有一个动作侦听器 其开头如下 OK Button Action Listener private void okButtonActionPerformed ActionEv
  • TSQL 将结果集均分并更新

    我的数据库有 3 个表 如下所示 Orders 表的数据如下 OrderID OperatorID GroupID OrderDesc Status Cash 1 1 1 small order 1 100 2 1 1 another or
  • NodeJS 推送队列,由 Laravel Worker 消耗

    我正在尝试使用节点应用程序发送到 SQS 的消息 因此 推送 操作由服务器 A 上的 Node App 执行 监听 操作由服务器 B 上的 Laravel App 执行 我的问题 我不知道如何格式化要使用的有效负载php artisan q
  • 在托管代码中 P/Invoking SetWindowLong 和 CallWindowProc(紧凑框架)

    我正在尝试使用 SetWindowLong 覆盖 winmobile 任务栏的窗口过程 以便捕获和阻止按下的按钮 我创建了一个类 其中包含一种用于重写的方法和一种用于恢复窗口过程的方法 MessageReceived 方法是我用来替换任务栏
  • 从代码注释中引用 TFS 工作项

    在 Visual Studio 2012 中 我想要从代码注释到 TFS 工作项的可单击引用 有没有一种简单的方法可以做到这一点 这也可以通过函数体内的注释 不是函数的摘要 来实现吗 所以我想要这样的东西
  • 如何使用c#仅获取目录中的文件名?

    当我使用下面的代码行时 我得到一个包含各个文件的整个路径的字符串数组 private string pdfFiles Directory GetFiles C Documents pdf 我想知道是否有一种方法可以只检索字符串中的文件名而不
  • 使用 spring 的条件 bean

    我正在尝试写一个ValidatorFactory这将根据其类型为我提供一个验证器 public Validator getNewValidator ValidatorType type switch case a new Validator
  • 如何修复创建新页面时的此错误?

    我有一个 Xamarin Forms 项目 在这个项目中 我已经有一个空白页面 但我添加了一个新页面 此时错误开始显示 显示的错误是 Error XLS0414 The type ContentPage was not found Veri
  • jQuery:检查字符串中是否存在特殊字符

    我知道这个问题在 Stack 上被问得更频繁 但我似乎无法从已经发布的问题中得到直接的答案 我需要检查所有特殊字符 除了 是否都在字符串中 如果是 则向用户发出警报 到目前为止我所拥有的是这样的 if Search val indexOf
  • 我可以在 C# *using* 块中拥有不同类型的对象吗?

    using Font font3 new Font Arial 10 0f font4 new Font Arial 10 0f Use font3 and font4 我知道可以在一个对象内使用多个相同类型的对象using clause
  • PhoneGap Build 版本 2.7.0 忽略 Android 上 config.xml 中的全屏首选项

    我已遵循此页面上非常明确的说明 https build phonegap com docs config xml https build phonegap com docs config xml 我已在 config xml 文件中包含以下
  • 有人能够正确使用 libsensors 吗?

    长话短说 我正在尝试编写一个可以检查CPU温度的应用程序 使用 libsensors 3 手册页 我至少能够获得 libsensors version 号 截至目前 这是我的代码 include
  • 在 Slack 上发布带有附加文件的消息

    我正在用 C 编写一个简单的控制台应用程序来与 Slack com 进行通信 我通过他们的 WebApi 执行此操作 目前我知道如何发布消息 带有附件 彩色 链接 用户等 并将文件发送到服务器 如果您以正常方式发送文件 键入文本框左侧的 上