Susisiekimo formos su failų priedais kūrimas
Sukurti „React“ kontaktinę formą, kuri leistų vartotojams siųsti el. laiškus su failų priedais, gali būti sudėtinga, ypač integruojant trečiųjų šalių paslaugas, pvz., „Resend“. Norint išvengti klaidų, labai svarbu užtikrinti tinkamą failų įkėlimo sąranką ir tvarkymą.
Šiame vadove bus paaiškinta, kaip nustatyti kontaktinę formą naudojant „Reaguoti“ ir „Siųsti iš naujo“, sprendžiant įprastas problemas, tokias kaip failų priedų tvarkymas ir serverio klaidų derinimas. Atlikę šiuos veiksmus galėsite sklandžiai siųsti el. laiškus su priedais.
komandą | apibūdinimas |
---|---|
Resend.emails.send() | Siunčia el. laišką su nurodytais parametrais, įskaitant nuo, į, temą, html ir priedus. |
setHeader() | Nustato atsakymo antraštę su nurodytais parametrais. Naudojamas čia norint leisti tik „POST“ metodą. |
FileReader() | Asinchroniškai skaito failo turinį. Naudojamas čia konvertuoti failą į base64 eilutę. |
readAsDataURL() | „FileReader“ metodas nuskaityti failą kaip „base64“ užkoduotą eilutę. |
onload() | „FileReader“ įvykių tvarkytuvas, kuris suaktyvinamas, kai failo skaitymo operacija baigta. |
split() | Padalija eilutę į eilučių masyvą. Čia naudojamas atskirti base64 turinį nuo duomenų URL priešdėlio. |
JSON.stringify() | Konvertuoja „JavaScript“ objektą arba reikšmę į JSON eilutę. |
El. pašto priedo diegimas „React“ kontaktų formoje
Užpakalinės programos scenarijus sukuriamas naudojant Next.js API maršrutus ir biblioteką „Resend“, kad būtų galima siųsti el. laiškus su priedais. Pagrindinė funkcija, Resend.emails.send(), naudojamas el. laiškui siųsti. Ši funkcija paima tokius parametrus kaip from, to, subject, html, ir attachments. The attachments parametras apima failo turinį ir failo pavadinimą. Scenarijus pradedamas importuojant reikalingus modulius ir inicijuojamas pakartotinio siuntimo egzempliorius naudojant API raktą, saugomą aplinkos kintamuosiuose. Tik funkcijos rankenos POST užklausas, išsiųsti el. laišką ir grąžinti el. pašto ID sėkmingai. Jei metodas nėra POST, ji nustato atsakymo antraštę, kad būtų leidžiama tik POST pateikia užklausas ir grąžina 405 būseną.
Priekinėje dalyje sukurtas „React“ komponentas, skirtas tvarkyti kontaktinę formą. Komponentas palaiko failo turinio ir failo pavadinimo būseną naudodamas „React“. useState kabliukas. Kai pasirenkamas failas, a FileReader objektas nuskaito failo turinį kaip base64 koduotą eilutę. Failo turinys ir pavadinimas išsaugomi komponento būsenoje. Pateikus formą, asinchroninė funkcija siunčia a POST užklausa užpakalinei API su base64 koduotu failo turiniu ir failo pavadinimu. Užklausų antraštės nustatytos į application/json o užklausos organe yra failo duomenys. Jei el. laiškas sėkmingai išsiųstas, rodomas įspėjimas; kitu atveju rodomas klaidos įspėjimas.
Užpakalinės programos scenarijus, skirtas siųsti el. laišką su priedu naudojant siuntimą iš naujo
Backend scenarijus Next.js su siuntimu iš naujo
import type { NextApiRequest, NextApiResponse } from 'next';
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
const send = async (req: NextApiRequest, res: NextApiResponse) => {
const { method } = req;
const { content, filename } = req.body;
switch (method) {
case 'POST': {
try {
const { data } = await resend.emails.send({
from: 'onboarding@resend.dev',
to: ['XXXXXXXXXX@gmail.com'],
subject: 'Email with attachment',
html: '<p>See attachment</p>',
attachments: [{
content,
filename,
}],
});
return res.status(200).send({ data: data?.id });
} catch (error) {
return res.status(500).json({ error: 'Internal Server Error' });
}
}
default: {
res.setHeader('Allow', ['POST']);
res.status(405).end(`Method ${method} Not Allowed`);
}
}
};
export default send;
Priekinės dalies komponentas, skirtas kontaktinei formai su failo priedu
Frontend komponentas React.js
import * as React from 'react';
const ContactForm: React.FC = () => {
const [content, setContent] = React.useState<string | null>(null);
const [filename, setFilename] = React.useState('');
const onSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (content === null) {
alert('Please select a file to upload');
return;
}
const base64Content = content.split(',')[1];
try {
await fetch('/api/send', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ content: base64Content, filename }),
});
alert('Request sent');
} catch (e) {
alert('Something went wrong');
}
};
const onAddFileAction = (e: React.ChangeEvent<HTMLInputElement>) => {
const reader = new FileReader();
const files = e.target.files;
if (files && files.length > 0) {
reader.onload = (r) => {
if (r.target?.result) {
setContent(r.target.result.toString());
setFilename(files[0].name);
}
};
reader.readAsDataURL(files[0]);
}
};
return (
<form onSubmit={onSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '20px', width: 200 }}>
<input type="file" name="file" onChange={onAddFileAction} accept="image/*" />
<input type="submit" value="Send Email" />
</form>
);
};
export default ContactForm;
Failų įkėlimų tvarkymas reakcijos formose
Kai kalbate apie failų įkėlimą į „React“ formas, labai svarbu užtikrinti teisingą failų skaitymo ir duomenų kodavimo tvarkymą. Naudojant FileReader API JavaScript leidžia mums asinchroniškai skaityti failų turinį, konvertuojant juos į base64 koduotą eilutę, kuri reikalinga failo duomenims siųsti HTTP. Šią užkoduotą eilutę galima lengvai perduoti kaip užklausos dalį, kai skambinama API.
Labai svarbu užtikrinti, kad failo duomenys būtų teisingai nuskaityti ir užkoduoti, kad būtų išvengta tokių problemų, kaip duomenų sugadinimas arba nebaigti įkėlimai. Be to, tinkamai tvarkant įvairius failų tipus ir dydžius galima išvengti netikėtų klaidų. Tinkamas klaidų tvarkymas ir naudotojų atsiliepimai, pvz., įspėjimai, taip pat yra svarbūs siekiant padėti vartotojui įkelti failą ir informuoti, jei kas nors negerai.
Dažni klausimai ir atsakymai apie el. laiškų su priedais siuntimą sistemoje „React“.
- Koks yra naudojimo tikslas FileReader įkeliant failus?
- The FileReader API naudojama asinchroniškai nuskaityti failų turinį ir užkoduoti juos kaip base64 eilutę, skirtą perduoti HTTP užklausose.
- Kaip galiu užtikrinti, kad įkeliami failai būtų saugūs?
- Įsitikinkite, kad priimami tik tam tikri failų tipai, naudodami accept atributas įvesties lauke. Be to, patvirtinkite failo turinį serverio pusėje.
- Kokią reikšmę turi onload įvykis FileReader?
- The onload įvykis suaktyvinamas, kai baigiama failo skaitymo operacija, todėl galite pasiekti failo turinį ir atlikti tolesnius veiksmus.
- Kaip galiu tvarkyti didelius failus „React“?
- Jei failai yra dideli, apsvarstykite galimybę įkelti suskirstytus failus, kad išvengtumėte naršyklės atminties apribojimų ir pateiktumėte vartotojui grįžtamąjį ryšį apie eigą.
- Kodėl man reikia naudoti JSON.stringify siunčiant failo duomenis?
- JSON.stringify konvertuoja JavaScript objektą, kuriame yra failo duomenys, į JSON eilutę, kuri yra reikalingas API iškvietimų užklausos turiniui formatas.
- Ką rodo 500 (vidinė serverio klaida) siunčiant el.
- Klaida 500 paprastai rodo serverio problemą, pvz., neteisingą API galutinio taško konfigūraciją arba el. pašto siuntimo paslaugos problemas.
- Kaip galiu derinti 500 klaidą savo API skambučiuose?
- Patikrinkite, ar serverio žurnaluose nėra išsamių klaidų pranešimų, ir įsitikinkite, kad API galutinis taškas ir užklausos naudingoji apkrova yra tinkamai sukonfigūruoti.
- Kokį vaidmenį atlieka res.setHeader metodas žaisti backend scenarijus?
- The res.setHeader metodas naudojamas HTTP atsako antraštei nustatyti, nurodant leidžiamus HTTP metodus (pvz., „POST“).
- Kaip galiu pateikti naudotojų atsiliepimus įkeliant failus?
- Naudokite įspėjimo pranešimus, eigos juostas arba būsenos indikatorius, kad informuotumėte vartotojus apie įkėlimo būseną ir visas pastebėtas klaidas.
- Ar galiu įkelti kelis failus vienu metu naudojant šią sąranką?
- Ši sąranka tvarko vieno failo įkėlimą. Jei norite naudoti kelis failus, turite modifikuoti kodą, kad galėtumėte tvarkyti failų duomenų masyvus ir siųsti juos API užklausoje.
Paskutinės mintys apie „React“ kontaktines formas
Failų priedų diegimas „React“ kontaktinėje formoje naudojant „Resend“ apima ir priekinę, ir galinę konfigūraciją. Priekinė dalis tvarko failų pasirinkimą, skaitymą ir kodavimą į base64, o užpakalinė dalis tvarko el. laiško su priedu siuntimą naudodama pakartotinio siuntimo API. Tinkamas klaidų tvarkymas ir naudotojų atsiliepimų mechanizmai yra labai svarbūs sklandžiam naudotojo patirčiai. Vadovaudamiesi geriausios praktikos pavyzdžiais ir užtikrindami, kad visos konfigūracijos yra teisingos, galite išvengti įprastų spąstų, pvz., serverio klaidų.