Încerc să încarc un fișier sau o imagine pe un site D9 prin intermediul api json. Testul este și anume de a încărca imaginea utilizatorului pe entitatea utilizator.
Am tot urmat documentatia sau citeste intrebari despre, dar nu o pot face să funcționeze.
Front-end-ul este realizat cu Next.js.
Unul dintre testele efectuate este următorul:
Front-end-ul următor apelează serverul API next.js:
const filename = selectatFile.name;
const fr = new FileReader();
fr.readAsArrayBuffer(selectedFile);
fr.onload = funcție asincronă () {
const arrayBuffer = fr.rezultat;
if (arrayBuffer && typeof arrayBuffer !== „șir”) {
const base64String = _arrayBufferToBase64(arrayBuffer);
const cookieSession = await getUpdateCookie();
const res = await fetch(`/api/users-test/user?cookie=${cookieSession}&name=${filename}`, {
metoda: „POST”, corp: base64String,
});
}
}
funcția _arrayBufferToBase64(buffer: ArrayBuffer) {
fie binar = '';
const bytes = new Uint8Array(buffer);
const len = bytes.byteLength;
pentru (fie i = 0; i < len; i++) {
binar += String.fromCharCode(bytes[i]);
}
return window.btoa(binar);
}
Serverul API next.js postează apoi pe Drupal:
const res = așteaptă preluarea (
`${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}/jsonapi/user/user/{userID}/user_picture`,
{
metoda: 'POST',
antete: {
„Content-Type”: „application/octet-stream”,
Accept: „application/vnd.api+json”,
'Conținut-Dispoziție': `name="fișier"; filename="${filename}"`,
Autorizare: `Bearer ${token}`,
},
body: req.body,
}
);
Am încercat diferite moduri de a converti fișierul în „date binare de fișier”, dar niciunul nu funcționează: imaginea utilizatorului este întotdeauna un pătrat gol cu un X.
Totuși, dacă încerc același apel cu poștașul, fișierul este încărcat corect:
Deci, deocamdată, presupun că problema este pe codul javascript, în timp ce Drupal a fost configurat corect.