一、准备工作

二、创建上传表单

<form action="upload.php" method="post" enctype="multipart/form-data">
    选择图片:<input type="file" name="image" />
    <input type="submit" value="上传" />
</form>

三、编写PHP上传处理脚本

<?php
// upload.php
if (isset($_FILES['image'])) {
    $image = $_FILES['image'];
    $upload_dir = 'uploads/';
    $file_name = basename($image['name']);
    $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
    $new_file_name = uniqid() . '.' . $file_ext;
    $upload_path = $upload_dir . $new_file_name;

    if (move_uploaded_file($image['tmp_name'], $upload_path)) {
        echo "文件上传成功!路径:{$upload_path}";
    } else {
        echo "文件上传失败!";
    }
}
?>

四、使用iframe进行异步上传

为了实现不刷新页面的上传效果,我们可以使用iframe来异步提交表单。以下是HTML代码,其中包含iframe元素:

<iframe id="upload_iframe" name="upload_iframe" style="display:none;"></iframe>
<form action="upload.php" method="post" enctype="multipart/form-data" target="upload_iframe">
    选择图片:<input type="file" name="image" />
    <input type="submit" value="上传" />
</form>

在上面的代码中,表单的target属性被设置为upload_iframe,这意味着表单数据将被发送到iframe的name指定的目标。

五、处理iframe上传结果

<?php
// upload.php
if (isset($_FILES['image'])) {
    // ... 省略之前的代码 ...

    if (move_uploaded_file($image['tmp_name'], $upload_path)) {
        echo "<script>parent.uploadSuccess('{$upload_path}');</script>";
    } else {
        echo "<script>parent.uploadFailed('文件上传失败!');</script>";
    }
}
?>

在HTML中,我们定义了两个JavaScript函数uploadSuccessuploadFailed,用于处理上传成功和失败的情况。

<script>
function uploadSuccess(path) {
    // 图片上传成功后的处理逻辑
    alert('图片上传成功!');
    // 在这里可以添加代码将图片路径显示在页面上
}

function uploadFailed(message) {
    // 图片上传失败后的处理逻辑
    alert(message);
}
</script>

六、总结