Сохранять файлы dropzone в хранилище сессий - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь временно сохранить некоторые данные формы в хранилище сеанса и не могу найти способ надлежащим образом хранить поставленные в очередь (не загруженные) файлы dropzone.js.

Согласно документации , Я уже пробовал следующее:

сохранение:

dropzone.getQueuedFiles().forEach(function(file, index) {
      sessionStorage.setItem("picture_" + index, file.dataURL);
      sessionStorage.setItem("picture_" + index + "_name", file.name);
      sessionStorage.setItem("picture_" + index + "_type", file.type);
    })

получение после рендеринга DOM:

let restoredFiles = 0;
  for(let i =0; i < dropzone.options.maxFiles; i++) {
    restoredFiles++;
    if(sessionStorage.getItem('picture_' + i) !== null){
      let data_url = sessionStorage.getItem('picture_' + i);
      let name = sessionStorage.getItem('picture_' + i + '_name');
      let type = sessionStorage.getItem('picture_' + i + '_type');
      let mockFile = {dataURL: data_url, name: name, type: type};

      dropzone.emit("addedfile", mockFile);
      dropzone.emit("thumbnail", mockFile);
      dropzone.createThumbnailFromUrl(mockFile);
      dropzone.emit("complete", mockFile);
    }
  }
dropzone.options.maxFiles = dropzone.options.maxFiles - restoredFiles;

Это прекрасно работает для добавления файла в Dropzone, нонет способа показать эскиз.Ни одна из двух команд миниатюр не создает миниатюру, и без фактического URL-адреса я не могу использовать dropzone.createThumbnailFromUrl.

Есть ли лучший способ?

1 Ответ

0 голосов
/ 31 мая 2019

Прошло много времени, но в итоге я решил это так:

хранение:

var images = [];
dropzone.getQueuedFiles().forEach(function (file) {
  let image = {
    dataURL: file.dataURL,
    name: file.name,
    type: file.type,
    size: file.size,
  };
  images.push(image);
});
sessionStorage.setItem("images", JSON.stringify(pictures));

извлечение:

var images = JSON.parse(sessionStorage.getItem('images'));
images.forEach(function(image) {
  dropzone.files.push(image);
  dropzone.emit("addedfile", image);
  dropzone.emit("thumbnail", image, image.dataURL);
  dropzone.emit("complete", image);
});
dropzone.options.maxFiles = dropzone.options.maxFiles - images.length;
...