React Astro Island....
export default function ProfilePage() {
const [file, setFile] = useState<File | null>(null);
const handleImageChange = (e: ChangeEvent<FormInputElement>) => {
if(!event.currentTarget.files) return;
setFile(event.currentTarget.files[0]);
}
const updateProfile = (e: FormEvent<HTMLFormElement>) => {
const form = new FormData();
const userdata = {
username: form.get("username"),
avatar: form.get("avatar")
}
axiosApiClient.post("/api/update_user_profile", {
data: JSON.stringify(userdata),
headers: {
"Content-Type": "multipart/formdata"
}
}).then(
// Server responds with {
// username: "new_username",
// avatar: {} // empty object
//}
).catch();
}
return (
<>
<form onSubmit={updateProfile}
<Input name="username" ........ /> // username
<Input type="file" id="avatar" name="avatar" onChange={handleImageChange} /> // user avatar
</>
);
}