mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
[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:
parent
7e66e2736b
commit
20acb0dd17
@ -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}"
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user