Dropzone.js - как изменить имя файла перед загрузкой в папку
Я использую DropzoneJS скрипт для загрузки изображений с помощью drag & drop, но теперь я ищу решение для добавления текущих меток времени с именем файла перед загрузкой в папку сервера, потому что я не могу загрузить то же изображение, если файл уже существует в папке.
Я также упоминал ниже ссылку stackoverflow, но я запутался, где реализовать этот.
здесь 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;
}
}
}
чтобы префикс имени файла с меткой времени каждый раз перед загрузкой, у вас есть два варианта в зависимости от версии 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.