Итак, я решил попробовать другой подход, используя хранилище S3. Я следовал инструкциям здесь, чтобы настроить бакет AWS S3. Вот мои настройки:
А вот мой код:
async uploadExternalImage(imageReferences: string[]): Promise<string[]> {
const imageUrls: string[] = [];
for (const ref of imageReferences) {
const filePath = this.app.metadataCache.getFirstLinkpathDest(ref, this.activeFile.name)?.path;
if (filePath) {
const file = this.app.vault.getAbstractFileByPath(filePath) as TFile;
if (file) {
try {
const url = `${this.settings.baseUrl}/uploads/generate-presigned-put.json`;
//const imgfile = await this.app.vault.readBinary(file);
const img = {
type: "composer",
file_name: file.name,
file_size: file.stat.size,
}
console.log(JSON.stringify(img));
const headers = {
"Content-Type": "application/json",
"Api-Key": this.settings.apiKey,
"Api-Username": this.settings.disUser,
};
const response = await requestUrl({
url: url,
method: "POST",
body: JSON.stringify(img),
throw: false,
headers: headers
})
console.log(response.json)
} catch (error) {
console.error(`Ошибка загрузки: ${error}`);
//console.log(response.json)
}
} else {
console.error('ошибка')
}
} else {
console.error('ошибка')
}
}
return imageUrls;
}
Теперь я понимаю, что это пока не сработает, потому что я еще не загружаю файл. Из того, что я прочитал в документации, я должен отправить JSON-объект, содержащий type, file_name и file_size. API должен ответить ключом и URL, которые я буду использовать для фактической передачи файла. Но на данном этапе я получаю следующую ошибку:
{
"errors": [
"Запрошенный URL или ресурс не найден."
],
"error_type": "not_found"
}
[
"Запрошенный URL или ресурс не найден."
]
Я проверил свой API-ключ, чтобы убедиться, что у него есть разрешения — они есть. Но я всё равно создал новый. И глобальный тоже. Ни один не работает. Тот же код ошибки. Что я делаю не так?
Редактирование: вот объект img:
{"type":"composer","file_name":"face2.jpg","file_size":17342}
