Файл переименования не меняет имя файла в dropzone.js

Я хочу предотвратить загрузку файла-дубликата из dropzone Моя дропзона принимает только два файла, поэтому я хочу проверить, имеет ли второй файл то же имя файла, что и первый, если это так, измените второе имя файла.

используя функцию renameFile

Я добавил оператор if, который проверяет, равно ли содержимое файла оператор if не выполняется, если условие истинно

используя простую версию файл переименовывается при отправке на сервер, но не переименовывается внутри dropzone

renameFile: function (file) {
  let filename =  file.name = "sdsdds.xlsx";
  return filename;
renameFile: function (file) {
  let name = file.name

  let div_children = $('.dz-filename').children();
  // get filename of already existing file
  if (div_children.eq(0).text() !== ""){
    if (div_children.eq(0).text() === div_children.eq(1).text() ) {
      console.info(file.name)
      let filename =  file.name = "sdsdds"
      return filename;
    }
  }
},

document.addEventListener("DOMContentLoaded", function() {
  Dropzone.options.dropform = {
    maxFiles: 2,
    addRemoveLinks: true,
    maxFilesize: 2,
    parallelUploads: 1, //
    renameFile: function(file) {
      let name = file.upload.filename

      let div_children = $('.dz-filename').children();
      // get filename of already existing file
      if (div_children.eq(0).text() !== "") {
        if (div_children.eq(0).text() === div_children.eq(1).text()) {
          console.info(name)
          return name = "sdsdds"
        }
      }
      //
    },
  };
});
<html lang = "en">
<head>
  <link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.1/min/dropzone.min.css">
  <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src = "https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.2/min/dropzone.min.js"></script>
</head>
<body>
  <form id = "dropform" action = "{{ url_for('receave_files') }}" class = "dropzone">
  </form>
</body>
</html>

Можете ли вы создать рабочий пример? Так вам будет намного проще помочь..

Mosh Feu 20.12.2020 14:09

добавил один, файлы не могут быть загружены, хотя

seeman 20.12.2020 15:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
1 381
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, разместите autoDiscover форму и инициируйте ее. Это происходит до DOMContentLoaded, поэтому все, что вы делаете после, ничего не делает (вы можете заметить, что ни один из параметров не влияет).

Во-вторых, документы могут быть недостаточно четкими, но file.upload.filename доступен после загрузки файла. Это использовалось для определения фактического имени (file.name) и нового имени, если оно было переименовано (file.upload.filename).
Таким образом, вы должны использовать не file.upload.filename, а file.name.

В-третьих, я рекомендую не использовать html, чтобы узнать имя другого файла. Это не контракт, поэтому он может измениться и сломать ваше приложение.
Вместо этого я бы рекомендовал запускать плагин вручную. Таким образом, вы можете получить экземпляр dropzone и запросить его о загруженных файлах.

Dropzone.autoDiscover = false;
const myDropzone = new Dropzone("#dropform", {
  //..
  renameFile: function(file) {
    const { files } = myDropzone;
    const { name } = file;

    if (files.some(file => file.name === name)) {
      return name + Date.now();
    }
    return name;
  }
});

Демо

document.querySelector('button').addEventListener('click', () => {
  const names = myDropzone.files.map(({
    upload
  }) => upload.filename).join();
  alert(names);
});

Dropzone.autoDiscover = false;
const myDropzone = new Dropzone("#dropform", {
  url: "/",
  maxFiles: 2,
  addRemoveLinks: true,
  maxFilesize: 2,
  parallelUploads: 1,
  init: function() {
    this.on("addedfile", function(file) {
      file.previewElement.querySelector('[data-dz-name]').textContent = file.upload.filename;
    });
  },
  renameFile: function(file) {
    const { files } = myDropzone;
    const { name } = file;

    if (files.some(file => file.name === name)) {
      return name + Date.now();
    }
    return name;
  }
});
<link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.1/min/dropzone.min.css">
<script src = "https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.2/dropzone.js"></script>

<div id = "dropform" class = "dropzone">
</div>
<br />
<button>alert files name</button>

https://jsbin.com/huvoyiw/edit?html,js,output

Обновлять

Чтобы также обновить пользовательский интерфейс, вы можете прослушать addedfile и соответствующим образом обновить DOM. Как я уже упоминал, я чувствую себя очень комфортно с этим, потому что dropzone может изменить DOM, и функциональность будет тормозить, но это делает свою работу.

init: function() {
  this.on("addedfile", function(file) {
    file.previewElement.querySelector('[data-dz-name]').textContent = file.upload.filename;
  });
},

https://jsbin.com/qoxakod/edit?js,выход

спасибо за рекомендации. Я не совсем уверен, где переименовать файл, чтобы имя файла изменилось и в элементе span, это нужно сделать внутри renameFile или снаружи?

seeman 20.12.2020 21:01

Я обновил ответ, дайте мне знать, если что-то не понятно.

Mosh Feu 21.12.2020 00:02

Другие вопросы по теме