Dropzone.js - comment changer le nom du fichier avant de télécharger dans le dossier
j'utilise DropzoneJS script pour télécharger des images avec drag & drop, mais maintenant je suis à la recherche d'une solution pour ajouter des horodateurs avec le nom du fichier avant de télécharger dans le dossier du serveur, parce que je ne suis pas en mesure de télécharger la même image si le fichier existe déjà dans le dossier.
j'ai aussi fait référence au lien stackoverflow mais je ne sais pas où mettre en oeuvre ce.
- https://stackoverflow.com/a/23805488/3113858
- https://stackoverflow.com/a/19432731/3113858
Ici dropzone.js script pour référence
3 réponses
veuillez vérifier le code suivant que J'ai implémenté en utilisant PHP.
utilisez le code suivant dans votre fichier index
$(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"
});
});
Télécharger.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);
}
?>
j'Espère que ce sera utile pour télécharger des images à l'aide d'ajax et de la supprimer à l'aide d'ajax :)
j'ai trouvé de références suivantes:
Dropzone.js - Comment supprimer des fichiers de le serveur? Dropzone.js supprimer le bouton avec php
ajoutez aussi le code suivant dans votre dropzone.fichier js, après la ligne #1110 pour prévenir l'utilisateur de télécharger des fichiers en double avec le même nom :)
Dropzone.prototype.addFile = function(fichier) {
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;
}
}
}
pour préfixer le nom du fichier avec un timestamp à chaque fois avant le téléchargement, Vous avez deux options en fonction de votre version de DropzoneJS.
Les nouvelles versions de DropzoneJS 5.1+ a un renameFile
fonction utilisée comme suit:
...
renameFile: function (file) {
file.name = new Date().getTime() + '_' + file.name;
}
...
versions plus anciennes v4.3-v5.1 Ceci est fait un peu différemment.
Dans cette version est un renameFilename
option, c'est utilisé comme ceci:
Dropzone.autoDiscover = false;
$(document).ready(function () {
$(".dropzone").dropzone({
renameFilename: function (filename) {
return new Date().getTime() + '_' + filename;
}
});
});
codage heureux, Kalasch
je viens d'utiliser le fichier php standard renommé.
$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
cela a bien fonctionné pour moi et était assez simple à mettre en œuvre. Le. l'extension jpg n'est probablement pas recommandée pour le code dur, mais dans mon scénario, je n'obtiens que les types de fichiers jpg.