Tengo una variable de picadura de un csv. Quiero subirlo a un canal de Slack como un archivo .csv, no como texto.
async function run() { const csvData = 'foo,bar,baz'; const url = 'https://slack.com/api/files.upload'; const res = await axios.post(url, { channel: '#csvchannel', filename: 'CSVTest.csv', content: csvData }, { headers: { authorization: `Bearer ${slackToken}` } }); console.log('Done', res.data); } Este código devuelve: error: 'no_file_data', Cambiar contenido a archivo da la misma respuesta.
¿Qué tengo que hacer para convertir la picadura csv en un archivo que se pueda cargar? No puedo usar fs para escribir el archivo.
He intentado usar fs.createReadStream(csvData) pero eso necesita un archivo, no una cadena.
Documentación de la API de Slack: https://api.slack.com/methods/files.upload
No necesita convertir el CSV en un archivo, parece que le faltan un par de cosas aquí:
Vea un ejemplo práctico de cómo podría enviar los datos usando application/x-www-form-urlencoded
| Enviar un CSV a Slack | Ver en Fusebit |
|---|
const csvData = 'foo,bar,baz'; const url = 'https://slack.com/api/files.upload'; const params = new URLSearchParams() params.append('channels', slackUserId); params.append('content', csvData); params.append('title', 'CSVTest'); params.append('filetype', 'csv'); const result = await axios.post(url, params, { headers: { authorization: `Bearer ${access_token}`, 'Content-Type': 'application/x-www-form-urlencoded' } }); ctx.body = { message: `Successfully sent a CSV file to Slack user ${slackUserId}!` };