Как перехватить загрузку файлов в Form.io - PullRequest
0 голосов
/ 28 сентября 2019

Я работаю над внедрением Form.io в офлайн-сайт дружественных форм, построенный на jQuery.У меня он отлично работает с surveyJS, но Form.io по-разному обрабатывает поля файла, и у меня возникают проблемы с захватом объектов File для сохранения их в базе данных.

Вот мой код, заполняющий форму.Функция storeImage () сохраняет объект File с помощью localforage, а затем загружает его при подключении к сети.Моя проблема в том, что я могу получить только имена файлов, а не фактический объект файла.Любая помощь приветствуется.

              Formio.createForm(document.getElementById('surveyElement'), formioActiveModel)
                .then(function(form) {
                    form.submission = formData;

                    form.on('error', function(error) {
                       console.log(error);
                    });

                    // Everytime the form changes, this will fire.
                    form.on('change', function(changed) {
                        formio = changed;
                        console.log('Form was changed', changed);
                        if (formio.changed && typeof formio.changed != undefined) {
                            let files = $('input[type="file"]');
                            $.each(files, function(i,f) {
                               console.log($(f).prop('files'));
                            });
                            console.log();
                            // Process Files
                            //console.log(formioActiveModel);
                            let altered = false;
                            $.each(formioActiveModel.components, function(key, record) {
                                //console.log(record);
                                if (record.type === 'file') {
                                   $.each(formio.data[record.key], function(k, r) {
                                       console.log('We may need to upload this file: ' + record.storage);
                                       if (typeof r.url == undefined || !r.url) {
                                           console.log('File needs to be stored.');
                                           console.log(formio.data[record.key][k]);
                                           let image_uuid = uuid();
                                           let url =  "/images/file_" + image_uuid + '-' + r.name;
                                           let options = {};
                                           options.files = [];

                                           let file = { 'name': r.name };
                                           options.files.push(file);
                                           console.log(options);
                                           storeImage({}, options, image_uuid);
                                           formio.data[record.key][k].storage = 'url';
                                           formio.data[record.key][k].url = url;
                                           altered = true;
                                       } else {
                                           console.log('File DOES NOT needs to be stored.');
                                       }
                                   });
                                }
                            });
                            formioSaveState(formio,false);
                            if (altered) {
                                form.submission = formio.data;
                            }
                        }

                    });

                    // Register for the submit event to get the completed submission.
                    form.on('submit', function(submission) {
                        console.log('Form was submitted.');
                        formio = submission;
                        console.log(formio);
                    });

                    // What to do when the submit begins.
                    form.on('submitDone', function(submission) {
                        window.location = '/app/thanks.html';
                    });

                    formio = form;
                });
...