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