Dropzone.js - как изменить имя файла перед загрузкой в папку

Я использую DropzoneJS скрипт для загрузки изображений с помощью drag & drop, но теперь я ищу решение для добавления текущих меток времени с именем файла перед загрузкой в папку сервера, потому что я не могу загрузить то же изображение, если файл уже существует в папке.

Я также упоминал ниже ссылку stackoverflow, но я запутался, где реализовать этот.

  1. https://stackoverflow.com/a/23805488/3113858
  2. https://stackoverflow.com/a/19432731/3113858

здесь dropzone.JS скрипт для справки

3 ответов


пожалуйста, проверьте следующий код, который я реализовал с помощью PHP.

использовать следующий код индекс

$(document).ready(function() {
            Dropzone.autoDiscover = false;
            var fileList = new Array;
            var i =0;
            $("#some-dropzone").dropzone({
                addRemoveLinks: true,
                init: function() {

                    // Hack: Add the dropzone class to the element
                    $(this.element).addClass("dropzone");

                    this.on("success", function(file, serverFileName) {
                        fileList[i] = {"serverFileName" : serverFileName, "fileName" : file.name,"fileId" : i };
                        //console.log(fileList);
                        i++;

                    });
                    this.on("removedfile", function(file) {
                        var rmvFile = "";
                        for(f=0;f<fileList.length;f++){

                            if(fileList[f].fileName == file.name)
                            {
                                rmvFile = fileList[f].serverFileName;

                            }

                        }

                        if (rmvFile){
                            $.ajax({
                                url: "http://localhost/dropzone/sample/delete_temp_files.php",
                                type: "POST",
                                data: { "fileList" : rmvFile }
                            });
                        }
                    });

                },
                url: "http://localhost/dropzone/sample/upload.php"
            });

        });

загрузить.в PHP

<?php
$ds = DIRECTORY_SEPARATOR;  // Store directory separator (DIRECTORY_SEPARATOR) to a simple variable. This is just a personal preference as we hate to type long variable name.
$storeFolder = 'uploads';   // Declare a variable for destination folder.
if (!empty($_FILES)) {

    $tempFile = $_FILES['file']['tmp_name'];          // If file is sent to the page, store the file object to a temporary variable.
    $targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;  // Create the absolute path of the destination folder.
    // Adding timestamp with image's name so that files with same name can be uploaded easily.
    $date = new DateTime();
    $newFileName = $date->getTimestamp().$_FILES['file']['name'];
    $targetFile =  $targetPath.$newFileName;  // Create the absolute path of the uploaded file destination.
    move_uploaded_file($tempFile,$targetFile); // Move uploaded file to destination.

    echo $newFileName;
}
?>

delete_temp_files.в PHP

<?php
$ds = DIRECTORY_SEPARATOR;  // Store directory separator (DIRECTORY_SEPARATOR) to a simple variable. This is just a personal preference as we hate to type long variable name.
$storeFolder = 'uploads'; 

$fileList = $_POST['fileList'];
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;


if(isset($fileList)){
    unlink($targetPath.$fileList);
}

?>

надеюсь, это будет полезно для загрузки изображений с помощью ajax и удаления с помощью ajax:)

Я нашел следующие ссылки:

Dropzone.js-как удалить файлы из сервер? Dropzone.кнопка удаления js с php

также добавьте следующий код в dropzone.файл js после строки #1110 для предотвращения загрузки дубликатов файлов с тем же именем :)

Dropzone.прототип.addFile = функция (файл) {

if (this.files.length) {
   var _i, _len;
   for (_i = 0, _len = this.files.length; _i < _len; _i++) {
      if(this.files[_i].name === file.name && this.files[_i].size === file.size){
        return false;
      }
    }
  }

Ссылка: https://www.bountysource.com/issues/2993843-dropzone-did-not-check-the-duplicate-file-on-addfile?utm_campaign=plugin&utm_content=tracker%2F283989&utm_medium=issues&utm_source=github


чтобы префикс имени файла с меткой времени каждый раз перед загрузкой, у вас есть два варианта в зависимости от версии DropzoneJS.

новые версии DropzoneJS 5.1+ есть renameFile функция, которая используется следующим образом:

    ...
    renameFile: function (file) {
        file.name = new Date().getTime() + '_' + file.name;
    }
    ...

на старые версии v4.3-v5.1 это делается немного по-другому.

в этой версии есть renameFilename опция, это используется как это:

Dropzone.autoDiscover = false;
$(document).ready(function () {
    $(".dropzone").dropzone({
        renameFilename: function (filename) {
            return new Date().getTime() + '_' + filename;
        }
    });
});

удачи в кодировании, Kalasch


Я просто использовал стандартное переименование файла php.

$targetFile =  $targetPath . $_FILES['file']['name']; //the original upload
$newfilename = "somename" . $variable . ".jpg"; //a new filename string

rename($targetFile , $new); //rename at the end of the function

Это хорошо работало для меня и было довольно просто реализовать. Этот.расширение jpg, вероятно, не рекомендуется для жесткого кода, но в моем сценарии im получает только типы файлов jpg.