fix extracting base64 inline images from HTML, fixes #1159

This commit is contained in:
zadam 2020-07-26 22:58:22 +02:00
parent 3d324b954d
commit 099e90ed64
2 changed files with 27 additions and 4 deletions

View File

@ -273,6 +273,12 @@ class TreeCache {
async getBranchId(parentNoteId, childNoteId) {
const child = await this.getNote(childNoteId);
if (!child) {
console.error(`Could not find branchId for parent=${parentNoteId}, child=${childNoteId} since child does not exist`);
return null;
}
return child.parentToBranch[parentNoteId];
}

View File

@ -277,9 +277,15 @@ async function downloadImage(noteId, imageUrl) {
const downloadImagePromises = {};
function replaceUrl(content, url, imageNote) {
const quotedUrl = utils.quoteRegex(url);
if (url.length > 2000) {
// for very large inline base64 images which fail on regex max size
return content.replace(url, `api/images/${imageNote.noteId}/${imageNote.title}`);
}
else {
const quotedUrl = utils.quoteRegex(url);
return content.replace(new RegExp(`\\s+src=[\"']${quotedUrl}[\"']`, "g"), ` src="api/images/${imageNote.noteId}/${imageNote.title}"`);
return content.replace(new RegExp(`\\s+src=[\"']${quotedUrl}[\"']`, "g"), ` src="api/images/${imageNote.noteId}/${imageNote.title}"`);
}
}
async function downloadImages(noteId, content) {
@ -291,8 +297,19 @@ async function downloadImages(noteId, content) {
while (match = re.exec(origContent)) {
const url = match[1];
if (!url.includes('api/images/')
// this is and exception for the web clipper's "imageId"
const inlineImageMatch = /^data:image\/[a-z]+;base64,/.exec(url);
if (inlineImageMatch) {
const imageBase64 = url.substr(inlineImageMatch[0].length);
const imageBuffer = Buffer.from(imageBase64, 'base64');
const imageService = require('../services/image');
const {note} = await imageService.saveImage(noteId, imageBuffer, "inline image", true);
content = replaceUrl(content, url, note);
}
else if (!url.includes('api/images/')
// this is an exception for the web clipper's "imageId"
&& (url.length !== 20 || url.toLowerCase().startsWith('http'))) {
if (url in imageUrlToNoteIdMapping) {