Ich habe es versucht (sprichwörtlich nasser Nudeln werfen, um zu sehen, was kleben bleibt). Aber ich war schon besorgt und @simon hat Recht.
Idealerweise wäre das Plugin auch für Mobilgeräte verfügbar. Aber im Moment, wenn es nur für Desktop ist, dann ist es eben so.
Natürlich könnte eine andere Lösung sein: Obsidian Vault auf Mobilgeräten → Synchronisierung zum Desktop → CLI zum Hochladen nach Discourse. Aber das erscheint etwas umständlich.
Grundsätzlich ist die ideale Situation, dass das Discourse-Forum das Obsidian Vault ersetzt. So können Benutzer, die das Forum bevorzugen, das Forum nutzen. Benutzer, die eine Offline-Lösung bevorzugen (oder tatsächlich benötigen), können Obsidian nutzen. Ich habe bereits einige Ideen, wie eine bidirektionale Synchronisierung funktionieren könnte. Aber ich denke, Bilder/Dateien müssen zuerst irgendwie behandelt werden.
Bearbeiten:
Ich bin ziemlich überzeugt, dass dies funktionieren wird, aber ich kann die Parameter nicht richtig hinbekommen:
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)}`);
}