From 21ba68dd35eb579e8cfd1e96b85ee77f176d692d Mon Sep 17 00:00:00 2001 From: "kirill.moos" Date: Wed, 13 May 2026 20:48:12 +0300 Subject: [PATCH] fix files in linux --- lib/rocketchat/utils.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/rocketchat/utils.js b/lib/rocketchat/utils.js index beff8e3..7bd26eb 100644 --- a/lib/rocketchat/utils.js +++ b/lib/rocketchat/utils.js @@ -106,17 +106,35 @@ utils.srcPath = function (srcDir, filename) { return `${srcDir}/${path.basename(files[0])}` } +utils.truncateFilename = function (filename, maxBytes = 255) { + if (Buffer.byteLength(filename, 'utf8') <= maxBytes) { + return filename + } + const ext = path.extname(filename) + const base = path.basename(filename, ext) + const maxBaseBytes = maxBytes - Buffer.byteLength(ext, 'utf8') + let bytes = 0 + let i = 0 + while (i < base.length) { + const charBytes = Buffer.byteLength(base[i], 'utf8') + if (bytes + charBytes > maxBaseBytes) break + bytes += charBytes + i++ + } + return base.slice(0, i) + ext +} + utils.destPath = function (destDir, type, file) { - let dest = `${destDir}/${type}/${file._id}/${file.name}`; - const ext = path.extname(dest) + let name = file.name + const ext = path.extname(name) if (!ext || !/^\.[A-Za-z][A-Za-z0-9]*$/.test(ext)) { if (file.identify && file.identify.format) { - dest += '.' + file.identify.format + name += '.' + file.identify.format } else { - dest += '.' + file.type.split('/')[1] + name += '.' + file.type.split('/')[1] } } - return dest + return `${destDir}/${type}/${file._id}/${utils.truncateFilename(name)}` } utils.exportFile = async function (context, collection, fileId) {