Ich habe ein Problem mit doppelten Dateien hochladen auf meiner Website,

Was ich jedoch möchte, ist jedoch, während ich Bilder hochladelte, wenn es eine doppelte Situation gibt, wenn der Dateiname image1.jpg ist und wenn mehr image2.jpg. Ich habe es bei PHP getan. Ich muss jedoch nach dem Hochgeladen die genaue Datei abrufen, damit ich URL ordnungsgemäß an den Client senden kann.

Hier ist der Code Javascript

var node = document.getElementById("option-122"),
    ele = document.createElement("form");


ele.className = "fileup"; 

ele.setAttribute("name", "fileToUpload");
ele.setAttribute("id", "fileupload");
ele.setAttribute("method", "post");
ele.setAttribute("target", "hidden-iframe");
ele.setAttribute("enctype", "multipart/form-data");
ele.setAttribute("action", "/wp-content/themes/dalia/upload.php");
node.parentNode.insertBefore(ele, node.nextSibling);

document.getElementById('fileupload').innerHTML = '<input type="file" id="inputfile" name="fileToUpload" accept="image/*" onchange="uploadFile()"><input type="submit" name="submit" id="form-submit" style="display: none !important;"><iframe name="hidden-iframe" style="display: none;"></iframe>';



document.getElementById('inputfile').onchange = uploadOnChange;

function uploadOnChange() {
  var filename = this.value;
  var lastIndex = filename.lastIndexOf("\\");
  if (lastIndex >= 0) {
    filename = filename.substring(lastIndex + 1);
  }
  document.getElementById('option-122').value = 'www.myurl.com/wp-content/themes/dalia/uploads/'+filename;
  document.getElementById("form-submit").click(); 
}
node.setAttribute("type","hidden");
document.getElementById("fileupload").style.width = '95%'; 

Hier sieht PHP aus wie

<?php
  $uploads_dir = 'uploads/';

  $pname = $_FILES["fileToUpload"]["name"]; 
  $tname=$_FILES["fileToUpload"]["tmp_name"];

  $name = pathinfo($_FILES['fileToUpload']['name'], PATHINFO_FILENAME);
  $extension = pathinfo($_FILES['fileToUpload']['name'], PATHINFO_EXTENSION);

   $increment = 0; 
   $pname = $name . '.' . $extension;
   while(is_file($uploads_dir.'/'.$pname)) {
     $increment++;
     $pname = $name . $increment . '.' . $extension;
   }
   move_uploaded_file($tname, $uploads_dir.'/'.$pname);
   echo $pname;
?>

Im Moment ist es in Ordnung mit dem Schreibdateinamen im Wert von Option-122, aber wenn es sich um eine doppelte Situation handelt, funktioniert es nicht.

0
Jamiryo 2 Juni 2021 im 22:57

1 Antwort

Beste Antwort

Die Art, wie Sie das Formular (in einem IFRAME) einreichen, können Sie den neuen Dateinamen nicht einfach erhalten. Ich denke, Sie könnten Ihr Leben leichter machen und einfach einen eindeutigen Dateinamen zum Zeitpunkt des Hochladens mit getTime() zuweisen:

All dies zu Ihrem Formular:

<input type='hidden' name='useFileName' value='' />

document.getElementById('fileupload').innerHTML = '<input type="file" id="inputfile" name="fileToUpload" accept="image/*" onchange="uploadFile()"><input type='hidden' name='useFileName' value='' /><input type="submit" name="submit" id="form-submit" style="display: none !important;"><iframe name="hidden-iframe" style="display: none;"></iframe>';

Stellen Sie dann den Namen in dieser Funktion ein

function uploadOnChange() {
  var filename = this.value;
  var lastIndex = filename.lastIndexOf("\\");
  if (lastIndex >= 0) {
    filename = filename.substring(lastIndex + 1);
  }
// get extension
let ext = filename.split(".");
ext = ext[ext.length-1];
let newfile = 'upload-' + new Date().getTime() + "." + ext;
document.querySelector('input[name="useFileName"]').value=newfile;
  document.getElementById('option-122').value = 'www.myurl.com/wp-content/themes/dalia/uploads/'+newfile;
  document.getElementById("form-submit").click(); 
}

// In PHP dann die Datei beim Upload umbenennen

<?php
  $uploads_dir = 'uploads/';
  $tname=$_FILES["fileToUpload"]["tmp_name"];
  move_uploaded_file($tname, $uploads_dir.'/'.$_POST['useFileName']);
?>
1
Kinglish 2 Juni 2021 im 20:40