Здравствуйте дамы и господа. Нужна Ваша помощь.
Не могу понять как работать с формами в TS.
Делаю приложение для создания и чтения qr кодов. Все готово кроме последнего варианта обработки qr кода - загрузки файла.
Использую API (
https://goqr.me/api/doc/read-qr-code/), ссылка на чтение qr кода, там ниже есть вариант с загрузкой файла через обычную форму HTML. Она работает, однако там идет перенаправление где уже содержится ответ на странице.
Я пытаюсь переписать это все с использованием state. Мои действия: через инпут я закидываю файл (обработчик onChange) и сохраняю его в стейте. Далее из стейта я забираю этот файл и кладу в тело запроса POST. ну как понимаете ничего не выходит - бэд реквеcт 400.
Ниже приложу код как я это делаю, сильно не ругайте, только недавно начал использовать TS.
Помогите решить задачу: нужно отправить фотку с qr кодом по адресу что будет в теле запроса, и можно ли как то вернуть результат и вывести его на страницу после? (без редиректа, а динамически вывести его под инпутом, например)
const [file, setFile] = useState<FileList | any | string>() //тут хранится файл который гружу в инпут
function uploadFile(e: React.ChangeEvent<HTMLInputElement>) { //функция обработки загрузки файла
setFile(e.target.files[0]) //тут 0 потому что полный ответ приходит в FileList и я забираю первый элемент (единственный )
}
const handleSubmission = async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault()
const formData = new FormData();
formData.append('File', file); //тут закидываю тот файл что загрузил через инпут
await fetch('http://api.qrserver.com/v1/read-qr-code/', {
method: 'POST',
body: formData,
headers: { 'Content-Type': 'multipart/form-data' },
}
)
.then((res) => res.json())
.then((result) => console.log(result))
.catch((error) => console.error( error));
};
Вот сама форма которую я пытаюсь обработать (почти не отличается от той что на сайте предложена):
<form onSubmit={handleSubmission} >
<input type="file" name="file" className="upload-input" id="upload-file" onChange={uploadFile}/>
<label className="upload-btn" htmlFor="upload-file" > Upload your QR code </label>
<button type="submit">send</button>
</form>
P.S. инпут загрузки скрыт - открываю окно загрузки по label
В этом потоке информации повторю что я пытаюсь решить:
1. Обработку и вывод информации на страницу с пост запроса.
2. сделать это все без редиректа, как происходит на примере формы html на сайте с API
надеюсь, в столь поздний час мне сможет кто-то помочь