Bootstrap FileInput - инициализация с предзагрузкой файла
Использую в проекте Bootstrap FileInput ( http://plugins.krajee.com/file-input ).
Плагин всем устраивает - сама по себе загрузка в Async-режиме работает без проблем. Всё хорошо. Проблема в следующем: в проекте возникла необходимость сохранять "черновики форм". С сохранением самой формы проблем нет, а вот с загружаемыми файлами - проблема. Сохранить файлы инициированием метода upload - не проблема. Всё сохраняется на сервер. А вот потом при загрузке страницы надо в аплоадер подгрузить файлы. Тест-файл при сохранении сохраняется в /uploads/test.jpg Сейчас пробую так: HTML: <input type="file" id="t1" name="t1" class="file-input-ajax" multiple="multiple" data-signed="1"> <button id="upl">Upload</button> let uploader_options = { allowedFileExtensions: ["jpg", "png", "tiff"], language: 'ru', fileActionSettings: {showUpload: false, showZoom: false}, showUpload: false, uploadAsync: true, overwriteInitial: false, append: true, maxFileCount: 5, browseOnZoneClick: true, uploadExtraData: function () { var ret = {}; ret['field'] = $(this)[0].uploadFileAttr; ret['obj_type'] = 'apply'; ret['obj_action'] = 'send'; return ret; }, uploadUrl: "/ajax/fileupload.php", initialPreview: ['/uploads/test.jpg'], initialPreviewAsData: true, initialPreviewConfig: [{ caption: "test.jpg", size: 72564 }] }; $(function() { var blob = null; var xhr = new XMLHttpRequest(); xhr.open("GET", '/uploads/test.jpg'); xhr.responseType = "blob"; xhr.onload = function() { blob = xhr.response;//xhr.response is now a blob object console.log(blob); $('#t1').fileinput('AddToStack',blob); }; xhr.send(); $('#t1').fileinput(uploader_options); $('#upl').on('click', function(){ $('#t1').fileinput('upload'); }); }); Превью подгружается корректно, но при попытке upload - содержимое файла не прилетает на сервер (хотя запрос генерируется). Подгрузка через $('#t1').fileinput('AddToStack',blob); Это уже "от безнадёги". Есть у кого опыт с этим плагином? Как инициализировать с подгрузкой с сервера файлов? (причём файлы потом должны именно полноценно загрузиться ещё раз, так как идея в том, что пользователь должен иметь возможность убрать или добавить файлы после загрузки "черновика" - там могут быть как ранее сохранённые, так и вообще другой новый набор - так что надо грузить). |
забирать файлы с сервера не надо.
самый простой вариант - по отдельности аплоадить файлы и держать их на сервере, а в документе оперировать списком ссылок на эти загруженные файлы. Этот список и сохранять легко, и редактировать. При удалении черновика или документа удалить все связанные с ним загруженные файлы. таким образом каждый файл будет загружаться только один раз. возможный минус - лишние издержки, если юзер выбрал файл, потом передумал и удалил, и т.д.. Навскидку, это бывает нечасто. Но если для тебя это критичный кейс и возникает чаще чем хотелось бы, то можно упороться и поддерживать смешанный список, в котором могут быть как ссылки на ранее загруженные файлы (уже на сервере), так и свежесозданные пункты, которые пока держат файл только на клиенте и зааплоадятся при сохранении черновика или создании документа. |
Часовой пояс GMT +3, время: 08:58. |