J’ai donc pensé essayer une approche différente en utilisant le stockage S3. J’ai suivi les instructions ici pour configurer un bucket AWS S3. Voici mes paramètres :
Et voici mon code :
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 uploading: ${error}`);
//console.log(response.json)
}
} else {
console.error('error')
}
} else {
console.error('error')
}
}
return imageUrls;
}
Maintenant, je me rends compte que cela ne fonctionnera pas actuellement car je n’envoie pas réellement le fichier. D’après ce que j’ai lu dans la documentation, j’enverrais un objet json contenant le type, le nom du fichier et la taille du fichier. L’API devrait répondre avec une clé et une URL que j’utiliserais pour le transfert de fichier réel. Mais à ce stade, je reçois l’erreur suivante :
{
"errors": [
"The requested URL or resource could not be found."
],
"error_type": "not_found"
}
[
"The requested URL or resource could not be found."
]
J’ai vérifié ma clé API pour m’assurer qu’elle avait les permissions, c’est le cas. Mais j’en ai créé une nouvelle de toute façon. Et une globale. Aucune ne fonctionne. Même code d’erreur. Qu’est-ce que je fais de mal ?
Edit, voici l’objet img :
{"type":"composer","file_name":"face2.jpg","file_size":17342}
