[WEB-1312] fix: trim file name before uploading (#4661)

* fix: trim file name before uploading

* fix: check the cursor position before inserting image

* dev: add trimming for file assets

* dev: add filename validation above if

* dev: make the validation to 50 to support user uploads

---------

Co-authored-by: pablohashescobar <nikhilschacko@gmail.com>
This commit is contained in:
M. Palanikannan 2024-06-04 13:14:26 +05:30 committed by GitHub
parent 7e66e2736b
commit 20acb0dd17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 1 deletions

View File

@ -12,6 +12,7 @@ from .base import BaseModel
def get_upload_path(instance, filename): def get_upload_path(instance, filename):
filename = filename[:50]
if instance.workspace_id is not None: if instance.workspace_id is not None:
return f"{instance.workspace.id}/{uuid4().hex}-{filename}" return f"{instance.workspace.id}/{uuid4().hex}-{filename}"
return f"user-{uuid4().hex}-{filename}" return f"user-{uuid4().hex}-{filename}"

View File

@ -50,9 +50,25 @@ export async function startImageUpload(
}; };
try { try {
const fileNameTrimmed = trimFileName(file.name);
const fileWithTrimmedName = new File([file], fileNameTrimmed, { type: file.type });
const resolvedPos = view.state.doc.resolve(pos ?? 0);
const nodeBefore = resolvedPos.nodeBefore;
// if the image is at the start of the line i.e. when nodeBefore is null
if (nodeBefore === null) {
if (pos) {
// so that the image is not inserted at the next line, else incase the
// image is inserted at any line where there's some content, the
// position is kept as it is to be inserted at the next line
pos -= 1;
}
}
view.focus(); view.focus();
const src = await uploadAndValidateImage(file, uploadFile); const src = await uploadAndValidateImage(fileWithTrimmedName, uploadFile);
if (src == null) { if (src == null) {
throw new Error("Resolved image URL is undefined."); throw new Error("Resolved image URL is undefined.");
@ -112,3 +128,14 @@ async function uploadAndValidateImage(file: File, uploadFile: UploadImage): Prom
throw error; throw error;
} }
} }
function trimFileName(fileName: string, maxLength = 100) {
if (fileName.length > maxLength) {
const extension = fileName.split(".").pop();
const nameWithoutExtension = fileName.slice(0, -(extension?.length ?? 0 + 1));
const allowedNameLength = maxLength - (extension?.length ?? 0) - 1; // -1 for the dot
return `${nameWithoutExtension.slice(0, allowedNameLength)}.${extension}`;
}
return fileName;
}