首页 > 解决方案 > 如何使用 c# 通过 SlackAPI 上传文件 - 没有图像 - 并同时将其评论到 Slack

问题描述

我可以通过我的 SlackAPI 将图像上传到 Slack,我可以上传文件,我可以上传带有评论的图像 - 但我不能对没有图像的文件执行此操作。我确定这是我的消息结构的问题 - 看看:所有这些都是通过 HttpClient 完成的!

这是我的工作文件上传方法:

    public MultipartFormDataContent SendFileToChannel()
    {
        var requestContent = new MultipartFormDataContent();
        var fileContent = new StreamContent(GetFile.ReadFile());
        requestContent.Add(new StringContent(token), "token");
        requestContent.Add(fileContent, "file", Path.GetFileName(GetFile.path));

        return requestContent;
    }

此方法中没有“通道”,因为我还不想发布它。然后我设置 "public_url_shared": true 并获取公共 URL(使用另一种方法)。在响应中,似乎一切正常,shared 设置为 true,我得到一个 permalink_public-value,我传递它以发布包含此文件的消息,但是......

现在我应该能够在使用从第二种方法获得的 permalink_url 时发布消息。这适用于图像。但它不适用于文件。我总是收到错误响应“no_file_data”。这是我的方法:

    public MultipartFormDataContent SendMessageWithFile(SlackFileResponse resp)
    {
        var requestContent = new MultipartFormDataContent();            
        requestContent.Add(new StringContent(token), "token");            
        requestContent.Add(new StringContent(channel), "channel");
        requestContent.Add(new StringContent(text), "text");
        requestContent.Add(new StringContent("[{ \"fallback\":\"Anhang\", \"text\":\"\", \"\":\"" + resp.permalink_public + "\"}]"), "attachments");

        return requestContent;
    }

我在这里做错了吗?因为通过 RTM-Slack,人们可以轻松地将文件拖放到其中并向其中添加消息。所以它也必须通过 SlackAPI 来实现。对?

标签: c#slack-api

解决方案


这就是为什么这种方法不起作用的原因:

Slack 威胁图像与其他文件不同。图像是您可以通过 URL 包含在消息附件中的唯一文件类型。为此,我们有附件的属性image_url(和thumb_url)。

查看此页面以获取所有可用附件属性的列表。

如果您想在 Slack 频道中发布任何其他文件并能够对其发表评论,您需要通过上传files.upload立即分享。这很重要,因为目前无法通过官方 API 稍后在频道中共享之前上传的文件。

要在您的文件上传中包含评论,只需initial_comment在您的 API 调用中设置属性。

例子:

var requestContent = new MultipartFormDataContent();
var fileContent = new StreamContent(GetFile.ReadFile());
requestContent.Add(new StringContent(token), "token");
requestContent.Add(new StringContent("my_channel"), "channels");
requestContent.Add(new StringContent("Check out this amazing new file"), "initial_comment");
requestContent.Add(fileContent, "file", Path.GetFileName(GetFile.path));

推荐阅读