67 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

2023-11-29 18:23:54 +03:00
"use strict";
class MultipartData {
constructor() {
this.boundary = "----------------Eris";
this.bufs = [];
}
attach(fieldName, data, filename) {
if(data === undefined) {
return;
}
let str = "\r\n--" + this.boundary + "\r\nContent-Disposition: form-data; name=\"" + fieldName + "\"";
let contentType;
if(filename) {
str += "; filename=\"" + filename + "\"";
const extension = filename.match(/\.(png|apng|gif|jpg|jpeg|webp|svg|json)$/i);
if(extension) {
let ext = extension[1].toLowerCase();
switch(ext) {
case "png":
case "apng":
case "gif":
case "jpg":
case "jpeg":
case "webp":
case "svg": {
if(ext === "svg") {
ext = "svg+xml";
}
contentType = "image/";
break;
}
case "json": {
contentType = "application/";
break;
}
}
contentType += ext;
}
}
if(contentType) {
str += `\r\nContent-Type: ${contentType}`;
} else if(ArrayBuffer.isView(data)) {
str +="\r\nContent-Type: application/octet-stream";
if(!(data instanceof Uint8Array)) {
data = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
}
} else if(typeof data === "object") {
str +="\r\nContent-Type: application/json";
data = Buffer.from(JSON.stringify(data));
} else {
data = Buffer.from("" + data);
}
this.bufs.push(Buffer.from(str + "\r\n\r\n"));
this.bufs.push(data);
}
finish() {
this.bufs.push(Buffer.from("\r\n--" + this.boundary + "--"));
return this.bufs;
}
}
module.exports = MultipartData;