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

时间:2016-02-03 19:25:56

标签: php html ajax forms

我有一个简单的表单,允许用户选择一个文件然后上传它。 如何在文件上传之前检查文件是否存在,如果存在,则提示用户确认覆盖(是 - 覆盖,不 - 不做任何事情/取消)。我听说使用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.');
      }
    }
}   

即使取消&#39;我的代码也会覆盖该文件。在确认时选择。谢谢!

1 个答案:

答案 0 :(得分:0)

您的方法存在许多问题

首先,文件始终被覆盖是有意义的。即使文件存在,您也在调用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();
        }
    });
}