PHP-PHP如何在客户端上传一个很大文件之前获取文件大小?
我在客户端用浏览器把当地的一个4G视频准备上传到服务器,上传大于4G的文件,点击上传过一会出现该网页无法显示。我想实现上传之前获取文件大小 我用了fileSystem = new ActiveXObject("Scripting.FileSystemObject"),无法获取automatic对象。查了支持本地上传
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
jquery uploadify可以检查上传前文件的大小
PHP只能在接收到数据后才能进行对应的验证操作,因此想要在上传之前进行判断肯定是做不到的,因此需要借助其他的方式进行:
1、使用JS做判断文件大小,这个因为需要调用activex,所以IE浏览器会报告安全问题。
function showsize(files)
{
var fso,f;
fso=new activexobject("scripting.filesystemobject");
f=fso.getfile(files);
if(f.size>1024*4){
alert(f.size+" bytes");
}
2、HTML5标准的话非常好办的:
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
这样能够限制上传的大小和文件的类型,一旦大于指定的大小,就会主动放弃上传。
当然以上的两种方法因为都是在客户端进行验证,无法保证绝对的安全,因此建议在上传后继续使用$_FILES数组中的$_FILES['filename']['size'] 进行对应的文件大小的检查,以确定用户没有篡改相应的内容。
1、在客户端验证上传文件的大小可以使用flash来做上传,现在几乎所有的上传插件都可以在客户端验证文件的大小、文件类型,以及实现异步上传和上传进度还有批量上传。主要就是兼容性好,使用方便。所以在客户端验证文件大小可以用flash组件实现。例如:SWFupload、jquery uploadify 等。
2、html5 中在客户端验证也是相当方便,举个简单的例子:
html:
<form method="post" name="uploadData">
<input type="file" name="fileChooser" onchange='getFiles()'/>
</form>
js:
function getFiles() {
var file = document.forms['uploadData']['fileChooser'].files[0];
console.log(file);
}
输出如图:
详细可以看html5 file aip
PHP是在用户的HTTP请求发送完毕之后才开始执行的,所以如果是用form表单直接上传,那么等PHP开始执行时文件肯定已经上传完了。
所以你只能用Javascript控件在本地判断文件大小,然后再决定是否上传。在PHP里也进行同样的判断,以防止用户跳过JS脚本验证。但PHP是不可能在文件上传完之前得知文件大小的(除非你用JS在文件上传之前另外生成一个请求,只包含文件的大小)。