Post Binary Content from YouTrack
When you need to post files from YouTrack to a third-party application, the target application might require you to make POST requests with the Content-Type
header value set to multipart/form-data
.
To make such a request from a YouTrack workflow rule, pass an object for the payload
parameter of the Connection.postSync
method and set its type
value to 'multipart/form-data'
.
In the parts
parameter of the payload, YouTrack expects to find an array consisting of the attachment parts. You can send as many parts as necessary.
For each element of the parts
array, there are the following fields available:
Field | Type | Description | Required |
---|
name | String | The name of the part. | ✓ |
size | Number | The size of the attached file in bytes. | ✓ |
fileName | String | The name of the attachment file. | ✓ |
content | InputStream | String | The content of the file. When the contentType is not set explicitly, YouTrack expects the content as an InputStream in binary form. | ✓ |
contentType | String | The content type of the file. For each individual part, you can set the contentType value separately. Depending on the contentType value, YouTrack expects different types of the content . For example, if you set contentType: 'application/json' , the content value must be in JSON format. | |
Here is an example of a workflow rule that makes a POST request and passes an attachment with the multipart/form-data
type.
const entities = require('@jetbrains/youtrack-scripting-api/entities');
const http = require('@jetbrains/youtrack-scripting-api/http');
exports.rule = entities.Issue.action({
title: 'Reattach the first attachment',
// The base URL is taken from the first line of the issue description.
// Auth details are taken from the second of the issue description, the user ID - from the third line.
command: 'reattach',
guard: (ctx) => {
return true;
},
action: (ctx) => {
const issue = ctx.issue;
const baseURL = issue.description.split('\n')[0].trim()
const auth = issue.description.split('\n')[1].trim()
const rootUserId = issue.description.split('\n')[2].trim()
const connection = new http.Connection(baseURL);
const attachment = issue.attachments.first();
connection.addHeader('authorization', auth);
connection.postSync('issues/' + issue.id + '/attachments', [], {
type: 'multipart/form-data',
parts: [
{
name: 'my-part-name',
size: attachment.size,
fileName: 'filename',
content: attachment.content
}
]
});
},
requirements: {}
});
Last modified: 19 June 2024