لقد مضيت قدمًا وحاولت (رمي المعكرونة المبللة مجازيًا لمعرفة ما الذي سيلتصق). لكنني كنت متخوفًا بالفعل و @simon على حق.
من الناحية المثالية، يجب أن يكون المكون الإضافي متاحًا على الهاتف المحمول أيضًا. ولكن في الوقت الحالي، إذا كان سطح المكتب فقط هو ما نحصل عليه، فهو ما نحصل عليه.
بالطبع، قد يكون هناك حل آخر: Obsidian Vault على الهاتف المحمول → المزامنة إلى سطح المكتب → واجهة سطر الأوامر للتحميل إلى Discourse. ولكن هذا يبدو معقدًا بعض الشيء.
بشكل أساسي، الوضع المثالي هو أن يحل منتدى Discourse محل Obsidian Vault. بهذه الطريقة، يمكن للمستخدمين الذين يفضلون المنتدى استخدامه. يمكن للمستخدمين الذين يفضلون (أو يحتاجون بالفعل إلى حل غير متصل بالإنترنت) استخدام 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)}`);
}