1、实例说明
文件上传处理是无法通过 XMLHttpRequest 对象实现的,但可以通过一个 iframe 来提供表单请求,通过这样的方法实现文件上传无须对整个页面刷新,实现类似 AJAX 的功能。
2、关键技术
实现本例的关键是把 iframe 的 css属性 dispaly 设置为 none,通过为 iframe 标签设置 name 属性,就可以使用 form 标签中的 target 属性将请求传送给隐藏的 iframe 标签。设置好了之后就可以完成上传操作。
3、设计过程
(1)创建一个 upload.html 文件,在文件中创建一个包含隐藏 firame 标签的表单。代码如下:
<form name="form" action="upload.php" method="post" enctype="multipart/form-data" target="uploadframe" onSubmit="uploading(this)">
请选择上传图像:
<input type="file" name="image">
<input type="submit" name="sub" value="提交">
<iframe id="uploadframe" name="uploadframe" src="upload.php" style="display: none;"></iframe>
</form>
js 部分的代码:
<script>
function uploading(form){
form.submit();
}
</script>
(2)创建 upload.php 文件,通过 move_uploaded_file() 函数实现文件上传。代码如下:
<?php
$ext = ['image/jpg','image/png','image/gif','image/jpeg'];
$floder = 'images';
if(!is_dir($floder)){
mkdir($floder);
}
if(isset($_FILES['image'])){
if(in_array($_FILES['image']['type'], $ext)){
$path = $floder.'/'.$_FILES['image']['name'];
if(move_uploaded_file($_FILES['image']['tmp_name'], $path)){
echo "<script>alert('图像上传成功!')</script>";
} else {
echo "<script>alert('上传失败!')</script>";
}
} else {
echo "<script>alert('文件类型不正确!')</script>";exit;
}
}