例子就没有了,思想就有。
上传以后,保存上传的文件名,然后AJAX过去,用PHP函数filesize检测这个文件的大小,然后返回~
至于不用new ActiveXObject问题呢,要写兼容性的代码兼容就行的了。。
上传以后,保存上传的文件名,然后AJAX过去,用PHP函数filesize检测这个文件的大小,然后返回~
至于不用new ActiveXObject问题呢,要写兼容性的代码兼容就行的了。。
调试欢乐多
upload.html
<html>
<head>
<title>Ajax学习</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script language="javascript">
/**
* 初始化一个xmlhttp对象
*/
function InitAjax()
{
var ajax=false;
try
{
ajax=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
ajax=new ActiveXObject("Microsft.XMLHTTP");
}
catch(E)
{
ajax=false;
}
}
if(!ajax&& typeof XMLHttpRequest !='undefined')
{
ajax=new XMLHttpRequest();
}
return ajax;
}
function validatesize()
{
//获取接受返回信息层
var msg = document.getElementById("message");
//获取表单对象和用户信息值
var f = document.upload_img;
var picfile = f.picfile;
//接收表单的URL地址
var url="validate.php"; //实例化Ajax
var ajax = InitAjax();
//通过Post方式打开连接
ajax.open("POST", url, true);
//定义传输的文件HTTP头信息
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//发送POST数据
ajax.send(picfile);
//获取执行状态
ajax.onreadystatechange = function()
{
//如果执行状态成功,那么就把返回信息写到指定的层里
if (ajax.readyState == 4 && ajax.status == 200)
{
msg.innerHTML = ajax.responseText;
}
}
}
</script>
<body>
<!--上传表单,指定target属性为浮动框架iframe1-->
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload_img" target="iframe1">
选择要上传的图片:<input type="file" name="image" id="picfile" name="picfile" onchange="validatesize()"><br/>
<input type="submit" value="上传图片" >
</form>
<!--显示提示信息的层-->
<div id="message" ></div>
</body>
</html>validate.php
<?php
header("Content-type: text/html; charset=gb2312");
$picfile=$_REQUEST["picfile"];
var_dump($picfile);
?>根本打印不出来!为什么那!
MAX_FILE_SIZE 隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。
这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。
实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
要利用iframe来操作.详细请参看 ajaxupload
var f = document.upload_img;
var picfile = f.picfile; //接收表单的URL地址
var url="validate.php?picfile="+picfile;
_POST['picfile']这样?
理论上,ajax是可以上传的
用post方式,上传编码方式设为上传文件的
<head>
<title>Ajax学习 </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<script language="javascript">
/**
* 初始化一个xmlhttp对象
*/
function InitAjax()
{
var ajax=false;
try
{
ajax=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
ajax=new ActiveXObject("Microsft.XMLHTTP");
}
catch(E)
{
ajax=false;
}
}
if(!ajax&& typeof XMLHttpRequest !='undefined')
{
ajax=new XMLHttpRequest();
}
return ajax;
}
function validatesize()
{
//获取接受返回信息层
var msg = document.getElementById("message");
//获取表单对象和用户信息值
var f = document.forms["upload_img"];
var picfile = f.elements["picfile"].value;
//接收表单的URL地址
var url="jsTest.pro.php?picfile=" + escape(picfile);
//实例化Ajax
var ajax = InitAjax();
//通过Post方式打开连接
ajax.open("GET", url, true);
//定义传输的文件HTTP头信息
//ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//发送POST数据
ajax.send(null);
//获取执行状态
ajax.onreadystatechange = function()
{
//如果执行状态成功,那么就把返回信息写到指定的层里
if (ajax.readyState == 4 && ajax.status == 200)
{
msg.innerHTML = ajax.responseText;
}
}
}
</script>
<body>
<!--上传表单,指定target属性为浮动框架iframe1-->
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload_img" target="iframe1">
选择要上传的图片: <input type="file" name="image" id="picfile" name="picfile" onchange="validatesize()"> <br/>
<input type="submit" value="上传图片" >
</form>
<!--显示提示信息的层-->
<div id="message" > </div>
</body>
</html>
<?php
header("Content-type: text/html; charset=gb2312");
$picfile=$_REQUEST["picfile"];
echo filesize($picfile)."<br>";
var_dump($picfile);
?>
原因可能是你所选的图片Water lilies.jpg,两个单词中间有空格,好像是filesize不能统计什么的,但这只是我的猜测,你可以在测试一下,其实这应该在判断之前就进行处理的