如何使用C#通过SlackAPI上传文件(无图像)并同时将其注释到Slack将其、如何使用、注释、上传文件

由网友(谎言贯穿着我们的青春期)分享简介:我可以通过我的SlackAPI上传图片到Slack,我可以上传文件,我可以上传带有评论的图片--但我不能用没有图片的文件做到这一点。我肯定这是我的消息结构的问题-看看:所有这些都是通过HttpClient完成的!这是我的工作文件上传方法:public MultipartFormDataContent SendFile...

我可以通过我的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;
    }
聚合图床API上传工具 图片上传助手 V1.4 官方版

此方法中没有‘Channel’,因为我还不想发布它。 然后我设置"Public_url_Shared":true并获取公共URL(使用另一种方法)。 在响应Eevreything似乎一切正常,Shared被设置为True,并且我得到了一个PERMALINK_PUBLIC-值,我传递该值以发布包含此文件的消息,但是...

现在,我应该能够在使用从第二个方法获得的permarink_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实现。对吗?

推荐答案

以下是此方法不起作用的原因:

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

有关所有可用附件属性的列表,请查看this page。

如果您要在Slack频道发布任何其他文件并对其进行评论,您需要通过files.upload上传并立即共享。这一点很重要,因为目前还不能通过官方API在以后通过某个频道共享之前上传的文件。

若要在文件上载中包含注释,只需在API调用中设置initial_comment属性。

示例:

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));
阅读全文

相关推荐

最新文章