Skip to content

Commit 293cc52

Browse files
committed
#327: Add Buffer type support using formdata-node package
- Implemented `Buffer` to `File` conversion for attachment uploads. - Added `attachment.mimeType` an optional property. - Added automatic MIME type detection based on file extensions.
1 parent 9ca3605 commit 293cc52

File tree

8 files changed

+41
-3
lines changed

8 files changed

+41
-3
lines changed

package-lock.json

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"code:formatting": "npm run replace:all && npm run prettier && npm run lint:fix"
5454
},
5555
"devDependencies": {
56+
"@types/mime-types": "^2.1.4",
5657
"@types/node": "^18.19.69",
5758
"@types/sinon": "^17.0.3",
5859
"@typescript-eslint/eslint-plugin": "^8.19.0",
@@ -73,6 +74,7 @@
7374
"dependencies": {
7475
"axios": "^1.7.9",
7576
"formdata-node": "^6.0.3",
77+
"mime-types": "^2.1.35",
7678
"tslib": "^2.8.1"
7779
}
7880
}

src/serviceDesk/parameters/attachTemporaryFile.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export interface Attachment {
22
filename: string;
33
file: Buffer | ReadableStream | string | Blob | File;
4+
mimeType?: string;
45
}
56

67
export interface AttachTemporaryFile {

src/serviceDesk/serviceDesk.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FormData } from 'formdata-node';
2+
import * as mime from 'mime-types';
23
import * as Models from './models';
34
import * as Parameters from './parameters';
45
import { Callback } from '../callback';
@@ -116,7 +117,14 @@ export class ServiceDesk {
116117
const formData = new FormData();
117118
const attachments = Array.isArray(parameters.attachment) ? parameters.attachment : [parameters.attachment];
118119

119-
attachments.forEach(attachment => formData.append('file', attachment.file, attachment.filename));
120+
attachments.forEach(attachment => {
121+
const mimeType = attachment.mimeType ?? (mime.lookup(attachment.filename) || undefined);
122+
const file = Buffer.isBuffer(attachment.file)
123+
? new File([attachment.file], attachment.filename, { type: mimeType })
124+
: attachment.file;
125+
126+
formData.append('file', file, attachment.filename);
127+
});
120128

121129
const config: RequestConfig = {
122130
url: `/rest/servicedeskapi/servicedesk/${parameters.serviceDeskId}/attachTemporaryFile`,

src/version2/issueAttachments.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FormData } from 'formdata-node';
2+
import * as mime from 'mime-types';
23
import * as Models from './models';
34
import * as Parameters from './parameters';
45
import { Callback } from '../callback';
@@ -425,7 +426,14 @@ export class IssueAttachments {
425426
const formData = new FormData();
426427
const attachments = Array.isArray(parameters.attachment) ? parameters.attachment : [parameters.attachment];
427428

428-
attachments.forEach(attachment => formData.append('file', attachment.file, attachment.filename));
429+
attachments.forEach(attachment => {
430+
const mimeType = attachment.mimeType ?? (mime.lookup(attachment.filename) || undefined);
431+
const file = Buffer.isBuffer(attachment.file)
432+
? new File([attachment.file], attachment.filename, { type: mimeType })
433+
: attachment.file;
434+
435+
formData.append('file', file, attachment.filename);
436+
});
429437

430438
const config: RequestConfig = {
431439
url: `/rest/api/2/issue/${parameters.issueIdOrKey}/attachments`,

src/version2/parameters/addAttachment.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export interface Attachment {
22
filename: string;
33
file: Buffer | ReadableStream | string | Blob | File;
4+
mimeType?: string;
45
}
56

67
export interface AddAttachment {

src/version3/issueAttachments.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { FormData } from 'formdata-node';
2+
import * as mime from 'mime-types';
23
import * as Models from './models';
34
import * as Parameters from './parameters';
45
import { Callback } from '../callback';
@@ -425,7 +426,14 @@ export class IssueAttachments {
425426
const formData = new FormData();
426427
const attachments = Array.isArray(parameters.attachment) ? parameters.attachment : [parameters.attachment];
427428

428-
attachments.forEach(attachment => formData.append('file', attachment.file, attachment.filename));
429+
attachments.forEach(attachment => {
430+
const mimeType = attachment.mimeType ?? (mime.lookup(attachment.filename) || undefined);
431+
const file = Buffer.isBuffer(attachment.file)
432+
? new File([attachment.file], attachment.filename, { type: mimeType })
433+
: attachment.file;
434+
435+
formData.append('file', file, attachment.filename);
436+
});
429437

430438
const config: RequestConfig = {
431439
url: `/rest/api/3/issue/${parameters.issueIdOrKey}/attachments`,

src/version3/parameters/addAttachment.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export interface Attachment {
22
filename: string;
33
file: Buffer | ReadableStream | string | Blob | File;
4+
mimeType?: string;
45
}
56

67
export interface AddAttachment {

0 commit comments

Comments
 (0)