преобразование ObjectUrls в файлы в base64 ReactJS - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть приложение реагирования, где пользователь может сделать сообщение с некоторыми изображениями.В зависимости от формата, на данный момент это может быть как URL, так и файл.В случае, если это файл, я хочу его кодировать в base64, а затем отправить запрос обратно на мой сервер.Для этого я реализовал функцию с условием проверки, является ли это файл

submitPostHandler = (e) => {
    e.preventDefault();

    const post = {
        contents: this.state.content,
        images: this.encodeURLHandler(this.state.images)
    }

    this.setState({ showLoading: true });

    PostMapper.submitTextPost(post).then(
        this.setState({showLoading: false})
    );
}

внутри этой функции, когда я создаю объект Post, у меня есть функция для кодирования base64, если этоURL

 encodeURLHandler = (images) =>{
    const expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
    const regex = new RegExp(expression);
    let urls = [];
    images.map(img =>{
    if(!img.match(regex)){
    urls.push(img);
    const reader = new FileReader();
    reader.readAsDataURL(urls);
    reader.onload = () => {
    img = reader.result.replace(/^data:(.*;base64,)?/, '');
        if ((img.length % 4) > 0) {
            img += '='.repeat(4 - (img.length % 4));
        }
        }
    }
    });
}

всякий раз, когда я запускаю незавершенную функцию, я получаю сообщение об ошибке:

TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.

причина в том, что я в моем дочернем компоненте преобразовал файл в ObjectUrl для отображения впользователь, есть ли способ, как я могу сделать еще одно условие в моем методе, чтобы преобразовать его обратно в файл, чтобы отобразить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...