Без base64, загрузка на комп

1) ⚡Загрузка на тестовом сервере. Может принимать лишь один запрос

import React, { ChangeEvent, useState } from 'react';
import { IconButton } from '@mui/material';
import CloudUploadIcon from '@mui/icons-material/CloudUpload';
import defaultAva from '../assets/defaultAva.png'
import axios from 'axios';

export const InputTypeFile = () => {

    const [ava, setAva] = useState(defaultAva)
    const [isAvaBroken, setIsAvaBroken] = useState(false)

    const uploadHandler = (e: ChangeEvent<HTMLInputElement>) => {
        if (e.target.files && e.target.files.length) {
            const file = e.target.files[0]
            if (file.size < 4000000) {
                postAvatar(file)
            } else {
                alert('Файл слишком большого размера')
            }
        }
    }

    const postAvatar = (file: File) => {
        const formData = new FormData();
        formData.append('myFile', file);
        axios.post('https://neko-back.herokuapp.com/file', formData)
            .then((res) => {
                console.log('response: ', res.data)
            })
    }

    const errorHandler = () => {
        setIsAvaBroken(true)
        alert('Кривая картинка')
    }

    return (
        <div>
            <img
                src={isAvaBroken ? defaultAva : ava}
                style={{width: '100px'}}
                onError={errorHandler}
                alt="ava"
            />
            <label>
                <input type="file"
                       onChange={uploadHandler}
                       style={{display: 'none'}}
                />
                <IconButton component="span">
                    <CloudUploadIcon/>
                </IconButton>
            </label>
        </div>
    )
}
    

2) ⚡Получение данных

3) ⚡Сохранение файла на компьютере

Last updated