試してみましたが(ことわざで言う「濡れた麺を投げて何がくっつくか見る」)、すでに懸念があり、@simon の言う通りです。
理想的には、プラグインはモバイルでも利用可能であるべきです。しかし、現時点では、デスクトップのみで利用可能であれば、それで構いません。
もちろん、別の解決策としては、モバイルの Obsidian Vault → デスクトップに同期 → CLI で Discourse にアップロード、という方法もあります。しかし、これは少し複雑すぎるように思えます。
基本的に、理想的な状況は、Discourse フォーラムが Obsidian Vault を置き換えることです。そうすれば、フォーラムを好むユーザーはフォーラムを使用できます。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(`Upload Image jsonResponse: ${JSON.stringify(jsonResponse)}`);
imageUrls.push(jsonResponse.url);
} else {
new NotifyUser(this.app, `Error uploading image: ${response.status}`).open();
console.error(`Error uploading image: ${JSON.stringify(response.json)}`);
}