slackapi / deno-slack-api

Slack API Client for Deno Run on Slack projects
https://api.slack.com/automation
MIT License
35 stars 18 forks source link

[QUERY] How to use files.upload to upload a binary file #94

Open spencerwilson opened 6 months ago

spencerwilson commented 6 months ago

Question

How does one use files.upload? I tried

import { Readable } from "node:stream";

// ...

      // This is a `ReadableStream<Uint8Array>`...
      const audio = (await fetch("https://upload.wikimedia.org/wikipedia/commons/7/71/George_Gershwin_2.ogg")).body!;

      const response = await client.files.upload({
        channels: "<channel ID>",
        title: "Title",
        initial_comment: "Comment",
        // ...which I adapt into a Node.js `Readable` here
        file: Readable.from(audio),
        filename: "audio.ogg",
        filetype: "ogg",
      });

With this code, the API response is {"ok":false,"error":"no_file_data"}. I was expecting this to work since the files.upload JavaScript sample code, whose docs do similar, refer to something like the above as the legacy way to upload files. My use case is simple so I think I'm ok with a legacy way, as long as it works. Thanks!

Context

Environment

"deno-slack-sdk/": "https://deno.land/x/deno_slack_sdk@2.5.0/",
"deno-slack-api/": "https://deno.land/x/deno_slack_api@2.1.2/",

deno 1.40.5 (release, aarch64-apple-darwin) v8 12.1.285.27 typescript 5.3.3

ProductName: macOS ProductVersion: 14.2.1 BuildVersion: 23C71 Darwin Kernel Version 23.2.0: Wed Nov 15 21:53:18 PST 2023; root:xnu-10002.61.3~2/RELEASE_ARM64_T6000

Requirements

Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.

seratch commented 6 months ago

Hi @spencerwilson, thanks for asking the question! Our team is working on the files.upload v2 method addition in this PR: https://github.com/slackapi/deno-slack-api/pull/90 but it seems the changes may need some time until its release.

As a short-term solution, checking my code example mentioned at https://github.com/slackapi/deno-slack-api/issues/89 may be helpful for you. The code uploads a text file but you should be able to upload audio file by adjusting some parts of it.

spencerwilson commented 6 months ago

Thanks very much @seratch , I'll give that a try! Here's some misc other context that Slack folks might want to know:

ChuckJonas commented 5 months ago

I'm here for the same reasons :(

The client (injected from the deno function) does not seem to have a method called slackApi.files.getUploadURLExternal.

@spencerwilson how did you end up implementing this? Did you just use the token to call the endpoint with fetch?