unified file and image upload WIP

pull/255/head
zadam 2023-06-15 01:26:38 +07:00
parent 75c6afd1c3
commit 3ff5fe61b2
8 changed files with 23 additions and 37 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -89,7 +89,7 @@ const TPL = `
<div style="flex: 1 1;"></div>
</div>
<div class="attachment-deletion-warning alert alert-info"></div>
<div class="attachment-deletion-warning alert alert-info" style="margin-top: 15px;"></div>
<div class="attachment-content-wrapper"></div>
</div>

@ -267,7 +267,7 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget {
}
}
else {
this.watchdog.editor.execute('referenceLink', { notePath: notePath });
this.watchdog.editor.execute('referenceLink', { href: '#' + notePath });
}
this.watchdog.editor.editing.view.focus();

@ -1,6 +1,7 @@
const becca = require("../../becca/becca");
const blobService = require("../../services/blob");
const ValidationError = require("../../errors/validation_error");
const imageService = require("../../services/image.js");
function getAttachmentBlob(req) {
const preview = req.query.preview === 'true';
@ -41,16 +42,25 @@ function uploadAttachment(req) {
const {file} = req;
const note = becca.getNoteOrThrow(noteId);
note.saveAttachment({
role: 'file',
mime: file.mimetype,
title: file.originalname,
content: file.buffer
});
let url;
if (["image/png", "image/jpg", "image/jpeg", "image/gif", "image/webp", "image/svg+xml"].includes(file.mimetype)) {
const attachment = imageService.saveImageToAttachment(noteId, file.buffer, file.originalname, true, true);
url = `api/attachments/${attachment.attachmentId}/image/${encodeURIComponent(attachment.title)}`;
} else {
const attachment = note.saveAttachment({
role: 'file',
mime: file.mimetype,
title: file.originalname,
content: file.buffer
});
url = `#${noteId}?viewMode=attachments&attachmentId=${attachment.attachmentId}`;
}
return {
uploaded: true
uploaded: true,
url
};
}

@ -4,7 +4,6 @@ const imageService = require('../../services/image');
const becca = require('../../becca/becca');
const RESOURCE_DIR = require('../../services/resource_dir').RESOURCE_DIR;
const fs = require('fs');
const ValidationError = require("../../errors/validation_error");
function returnImage(req, res) {
const image = becca.getNote(req.params.noteId);
@ -59,24 +58,6 @@ function returnAttachedImage(req, res) {
res.send(attachment.getContent());
}
function uploadImage(req) {
const {noteId} = req.query;
const {file} = req;
becca.getNoteOrThrow(noteId);
if (!["image/png", "image/jpg", "image/jpeg", "image/gif", "image/webp", "image/svg+xml"].includes(file.mimetype)) {
throw new ValidationError(`Unknown image type '${file.mimetype}'`);
}
const {url} = imageService.saveImageToAttachment(noteId, file.buffer, file.originalname, true, true);
return {
uploaded: true,
url
};
}
function updateImage(req) {
const {noteId} = req.params;
const {file} = req;
@ -98,6 +79,5 @@ function updateImage(req) {
module.exports = {
returnImage,
returnAttachedImage,
uploadImage,
updateImage
};

@ -201,7 +201,6 @@ function register(app) {
// :filename is not used by trilium, but instead used for "save as" to assign a human-readable filename
route(GET, '/api/images/:noteId/:filename', [auth.checkApiAuthOrElectron], imageRoute.returnImage);
route(PST, '/api/images', [auth.checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], imageRoute.uploadImage, apiResultHandler);
route(PUT, '/api/images/:noteId', [auth.checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], imageRoute.updateImage, apiResultHandler);
apiRoute(GET, '/api/options', optionsApiRoute.getOptions);

@ -162,10 +162,7 @@ function saveImageToAttachment(noteId, uploadBuffer, originalName, shrinkImageSw
});
});
return {
attachment,
url: `api/attachments/${attachment.attachmentId}/image/${encodeURIComponent(fileName)}`
};
return attachment;
}
async function shrinkImage(buffer, originalName) {