Получить данные из экземпляра объекта filepond

У меня есть форма отправки в моем проекте React, где я использую API filepond, чтобы пользователи могли отправлять файлы в форму

Я просто использую стандартный компонент FilePond, взятый из документации.

   <FilePond ref={ref => this.pond = ref}
                      allowMultiple={true} 
                      maxFiles={4} 
                      oninit={() => this.handleInit() }
                      onupdatefiles={(fileItems) => {
                          // Set current file objects to this.state
                          this.setState({
                              files: fileItems.map(fileItem => fileItem.file)
                          });
                      }}>

                {/* Update current files  */}
                {this.state.files.map(file => (
                    <File key={file} src={file} origin="local" 
                 />
                ))}

            </FilePond>

Я отправляю весь запрос бэкэнд-REST-серверу в java, и поэтому я хочу отправить информацию о типах информации, данных (в кодировке base64) и расширении файла.

Я делаю это, создавая массив объектов в моем запросе

  result: this.state.files.map(file => ({
            "file": this.findFileTypeHandler(file.name), 
            "data": this.encodeFileHandler(file)
        }))
    }

в моем encodeFileHandler мне нужен способ конвертировать данные в base64, но я не вижу свойства, содержащего необработанные данные, в объекте file.

Есть ли способ получить к нему доступ, или у кого-нибудь есть лучшая альтернатива, которую я мог бы использовать?

2 ответа

Решение

Попробуйте плагин File encode для filepond, он делает именно то, что вам нужно:

... он кодирует удаленный файл как строку base64 и сохраняет строку в скрытом поле ввода в виде строки JSON. Он использует строку JSON, поэтому он также может добавить размер файла, тип, имя и метаданные.

Использование (React):
Импортируйте код плагина:

import FilePondPluginFileEncode from 'filepond-plugin-file-encode';

Зарегистрируйте плагин:

registerPlugin(FilePondPluginFileEncode);

Подробнее здесь

Для тех, кто ищет способ удалить blob из объекта FilePond, вот что сработало для меня. Я сохранил ссылку на объект FilePond вот так:

      pond = FilePond.create(
    document.querySelector('#file'), {
        allowMultiple: true,
        instantUpload: false,
        allowProcess: false
    });

А потом использовал pond.getFiles()метод получения объекта файлов FilePond. Это отличается от файловых объектов BLOB-объектов,

Файл FilePond - это не то же самое, что файл JavaScript или Blob. Файл FilePond - это оболочка для файлового объекта JavaScript. Документы FilePond

Однако вы можете использовать file свойство, чтобы получить такой файл BLOB-объекта,

      pondFiles = pond.getFiles();
for (var i = 0; i < pondFiles.length; i++) {
    // todo get file blob with pondFiles[i].file
}
Другие вопросы по тегам