Как отправлять изображения через API?

Я решил попробовать (в переносном смысле — бросил «мокрые лапши», чтобы посмотреть, что прилипнет). Но я уже был настороже, и @simon прав.

В идеале плагин должен быть доступен и на мобильных устройствах. Но пока, если мы получим только версию для десктопа, то и это уже хорошо.

Конечно, ещё один возможный вариант: хранилище Obsidian на мобильном → синхронизация с десктопом → CLI для загрузки в Discourse. Но это кажется немного запутанным.

В общем, идеальная ситуация — это когда форум Discourse заменяет хранилище Obsidian. Тогда пользователи, предпочитающие форум, смогут им пользоваться, а те, кто предпочитает (или действительно нуждается в офлайн-решении), смогут использовать Obsidian. У меня уже есть некоторые идеи, как может работать двусторонняя синхронизация. Но, думаю, сначала нужно решить, как обрабатывать изображения и файлы.

Редактирование:

Я довольно уверен, что это сработает, но не могу, кажется, правильно задать параметры:

					try {
						const imgfile = await this.app.vault.readBinary(file);
						const boundary = genBoundary();
						const sBoundary = '--' + boundary + '\r\n';
						let body = '';
						body += `${sBoundary}Content-Disposition: form-data; name="type"\r\n\r\ncomposer\r\n`;
						body += `${sBoundary}Content-Disposition: form-data; name="synchronous"\r\n\r\ntrue\r\n`;
						body += `${sBoundary}Content-Disposition: form-data; name="files[]"; filename="${file.name}"\r\nContent-Type: image/jpg\r\n`;

						const eBoundary = '\r\n--' + boundary + '--\r\n';
						const bodyArray = new TextEncoder().encode(body);
						const endBoundaryArray = new TextEncoder().encode(eBoundary);

						const formDataArray = new Uint8Array(bodyArray.length + imgfile.byteLength + endBoundaryArray.length);
						formDataArray.set(bodyArray, 0);
						formDataArray.set(new Uint8Array(imgfile), bodyArray.length);
						formDataArray.set(endBoundaryArray, bodyArray.length + imgfile.byteLength);

						const url = `${this.settings.baseUrl}/uploads.json`;
						const headers = {
							"Api-Key": this.settings.apiKey,
							"Api-Username": this.settings.disUser,
							"Content-Type": `multipart/form-data; boundary=${boundary}`
						};

						const response = await requestUrl({
							url: url,
							method: "POST",
							body: formDataArray,
							throw: false,
							headers: headers,
						});

						if (response.status == 200) {
							const jsonResponse = response.json();
							console.log(`Загрузка изображения: jsonResponse: ${JSON.stringify(jsonResponse)}`);
							imageUrls.push(jsonResponse.url);
						} else {
							new NotifyUser(this.app, `Ошибка загрузки изображения: ${response.status}`).open();
							console.error(`Ошибка загрузки изображения: ${JSON.stringify(response.json)}`);
						}