如何上传文件-没有图片-并同时使用c#

时间:2018-11-16 12:03:26

标签: c# slack-api

我可以通过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(使用另一种方法)。 在响应中,evreything似乎没问题,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成为可能。对吧?

1 个答案:

答案 0 :(得分:1)

这就是为什么这种方法行不通的原因:

Slack对图像的威胁与其他文件不同。图片是类型的文件,您可以通过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));