用户文件上传:上传前检查文件是否存在(提示覆盖是/否)


User file upload: Check if file exists before upload (prompt overwrite yes/no)

我有一个简单的表单,允许用户选择一个文件然后上传它。如何在上传文件之前检查文件是否存在,如果存在,则提示用户确认覆盖(是 - 覆盖,否 - 不执行任何操作/取消)。我听说最好使用 ajax,但我对 ajax 的经验很少,找不到要实现的示例。

表单代码:

<form method='post' enctype='multipart/form-data' action='<?php $_server['PHP_SELF']; ?>'>
      <input type='file' name='file_upload'>          
      <br><br>
      <input type='submit' name='submit' value="Upload">
      </form>

我的尝试:

if(isset($_POST['submit'])) {
  if(file_exists($fullFileName)){ 
    echo '<script>
         if (!confirm("Do you want to overwrite the existing file?")) {
           window.location.replace(window.location.href);
         }
         </script>';
         unlink($fullFileName);
         if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], '' . $_FILES['file_upload']['name'])){
           die('Errrrrr! Error uploading file - check destination is writeable.');
         }
  }
    else {
      if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], '' . $_FILES['file_upload']['name'])){
              die('Errrrrr! Error uploading file - check destination is writeable.');
      }
    }
}   

我的代码会覆盖文件,即使在确认时选择了"取消"。谢谢!

您的方法存在许多问题

首先,文件总是被覆盖是有道理的。即使文件存在,您也会调用move_uploaded_file。为了使用 ajax 执行此操作,您必须首先调用服务器并调用 file_exists($fullFileName) 。如果文件存在,则返回 true,否则返回 false。根据此结果,如果文件不存在,您可以继续上传文件,或者如果文件确实存在,则提示用户是否要覆盖该文件。JQuery有一个很棒的ajax系统,这将使你更容易。

示例(注意 - 这不是经过测试的代码 - 它只是让您了解如何解决问题):

$("#formButton").submit(function(event){
    // Prevent form submission until we can call the server
    event.preventDefault();
    $.post("does_file_exist.php",
    {
        file:filename
    },
    function(data, status){
        var submit = true;
        if(data=="true"){
             if(!window.confirm('Overwrite File'){
                 submit = false;
             }
        }
        if(submit){
            // Enable default form behaviour and submit
            $("#formButton").unbind("submit");
            $("#formButton").submit();
        }
    });
}