js到底能不能判断客户端上传文件的大小

kunmingkunlun 2008-11-04 09:50:07
我的一个项目中要判断上传文件的大小,
在网上搜索了一下,
可是有时候能判断,有时候,弹出文件的大小为 -1,(很奇怪)
有位大虾说:其实js不能真正判断客户端上传文件的大小,牵扯到文件加载的问题
我也不是很明白,
哪位大虾帮忙解决一下吧!

如果能判断:最好能给一个js代码!
谢谢了!
...全文
2123 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanshiniepan 2008-11-04
  • 打赏
  • 举报
回复
敢问兄台,谁在自己的项目中用过new ActiveXObject("Scripting.FileSystemObject") ???

自己都不用就不要推荐给别人了吧!
jhwcd 2008-11-04
  • 打赏
  • 举报
回复
用AJAX可以获得。
LCKKING 2008-11-04
  • 打赏
  • 举报
回复
当然可以,利用这个方法
function getFileSize(filepath) {
if(window.ActiveXObject){
var fso=new ActiveXObject("Scripting.FileSystemObject");
var file=fso.GetFile(filepath);
filesize=file.size;
}
}
sxlfybb 2008-11-04
  • 打赏
  • 举报
回复
可是可以,不过只能在IE下用,并且还要加入信任站点。
因为需要使用控件,并且只能在windows下面用。
你查一下FSO的资源就OK
wanshiniepan 2008-11-04
  • 打赏
  • 举报
回复
图片是可以的,其他类型的文件基本上可以说是不可以的
neo_yoho 2008-11-04
  • 打赏
  • 举报
回复
在FF下单纯的在客户端用JS取不到 不过可以用AJAX获取
xiaojing7 2008-11-04
  • 打赏
  • 举报
回复
phantomsea 2008-11-04
  • 打赏
  • 举报
回复
mark
帮顶
Ghost_520 2008-11-04
  • 打赏
  • 举报
回复
我的例子


<script language="javascript">
function check(){

if(document.getElementById("name").value == "")
{
alert("昵称不允许为空!");
document.getElementById("name").focus();
return false;
}
else if(form1.content.value ==""){
alert("留言内容不允许为空!");
form1.content.focus();
return false;
}
else
{
// 当内容都不为空时,则向 XML 中插入游客留言的信息
fso = new ActiveXObject("Scripting.FileSystemObject");

var IsExists = getFile("c:\\leaveWordInfo.xml");
if(IsExists == "not exists")
{
// 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true);

var str = "";
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

str = "<info>";
f1.writeLine(str);

str = "<Id>L1</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();

}
else if(IsExists == "exists"){
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1); // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写

var Rowcounts = 0 ; //记录该文件的总行数以初始化数组。

var line = ts.ReadLine();

while(!ts.AtEndOfStream){
Rowcounts++;
line = ts.ReadLine();
}
Rowcounts += 1;

// 定义数组用来存储从 XML 中读取出来的值, Rowcounts --> XML 文档的总行数; 8 --> 要添加新留言的行数
array = new Array(Rowcounts);

// 至此 , 已全部将 XML 文档中的内容读出并存入到数组中储存
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1); // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写
var str = ts.ReadLine();

for(var i =0 ;; i++)
{
array[i] = str;
if(i == Rowcounts-1){
ts.Close();
break;
}
str = ts.ReadLine();
}

// 将新留言重新写入至 XML 文档中
// 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true);

var str = "";
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

// 重新往 XML 中写入旧留言
for(var i =2; i< array.length-1 ; i++){
var str2 = array[i] .toString();
f1.writeLine(str2);
}

// 添加新留言
str = "<info>";
f1.writeLine(str);

// 获得上一留言的 ID ,以此来设置新留言的 ID
var PreId = array[array.length -8].toString().substring(5,7);

str = "<Id>L"+(parseInt(PreId)+1)+"</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();
}

alert("留言成功!");
// location.href="../default.html";
return true;
}
}

// 此方法判断该 XML 是否存在
function getFile(filename)
{
if(!fso.FileExists(filename)){
// 不存在该文件
return "not exists";
}
else
{
return "exists";
}
}
</script>
Ghost_520 2008-11-04
  • 打赏
  • 举报
回复
我的例子


<script language="javascript">
function check(){

if(document.getElementById("name").value == "")
{
alert("昵称不允许为空!");
document.getElementById("name").focus();
return false;
}
else if(form1.content.value ==""){
alert("留言内容不允许为空!");
form1.content.focus();
return false;
}
else
{
// 当内容都不为空时,则向 XML 中插入游客留言的信息
fso = new ActiveXObject("Scripting.FileSystemObject");

var IsExists = getFile("c:\\leaveWordInfo.xml");
if(IsExists == "not exists")
{
// 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true);

var str = "";
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

str = "<info>";
f1.writeLine(str);

str = "<Id>L1</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();

}
else if(IsExists == "exists"){
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1); // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写

var Rowcounts = 0 ; //记录该文件的总行数以初始化数组。

var line = ts.ReadLine();

while(!ts.AtEndOfStream){
Rowcounts++;
line = ts.ReadLine();
}
Rowcounts += 1;

// 定义数组用来存储从 XML 中读取出来的值, Rowcounts --> XML 文档的总行数; 8 --> 要添加新留言的行数
array = new Array(Rowcounts);

// 至此 , 已全部将 XML 文档中的内容读出并存入到数组中储存
var ts = fso.OpenTextFile("c:\\leaveWordInfo.xml", 1); // 创建只读的 fso 对象:1 --> 只读 ; 2 --> 只写
var str = ts.ReadLine();

for(var i =0 ;; i++)
{
array[i] = str;
if(i == Rowcounts-1){
ts.Close();
break;
}
str = ts.ReadLine();
}

// 将新留言重新写入至 XML 文档中
// 如果不存在该文件,则创建该文件,并向该文件中写入一个 info 信息
var f1 = fso.createtextfile("c:\\leaveWordInfo.xml",true);

var str = "";
str = "<?xml version='1.0' encoding='GB2312'?>";
f1.writeLine(str);

str = "<leaveWordInfo>";
f1.writeLine(str);

// 重新往 XML 中写入旧留言
for(var i =2; i< array.length-1 ; i++){
var str2 = array[i] .toString();
f1.writeLine(str2);
}

// 添加新留言
str = "<info>";
f1.writeLine(str);

// 获得上一留言的 ID ,以此来设置新留言的 ID
var PreId = array[array.length -8].toString().substring(5,7);

str = "<Id>L"+(parseInt(PreId)+1)+"</Id>";
f1.writeLine(str);

str = "<name>"+document.getElementById("name").value+"</name>";
f1.writeLine(str);

// 获得该游客的性别
var sex = document.form1.sex;
var sex_value ="";
for(var i = 0 ; i< sex.length ; i++){
if(sex[i].checked){
sex_value = document.form1.sex[i].value;
}
}

str = "<sex>"+sex_value+"</sex>";
f1.writeLine(str);

// 获得该游客的表情
var brow = document.form1.emote;
var brow_value ="";
for(var i = 0 ; i< brow.length ; i++){
if(brow[i].checked){
brow_value = document.form1.emote[i].value;
}
}

str = "<brow>"+brow_value+"</brow>";
f1.writeLine(str);

// 获得当前时间
var date = new Date();
var year = date.getYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var Mintes = date.getMinutes();
var seconds = date.getSeconds();
str = "<date>"+(year+"-"+month+"-"+day+" "+hour+":"+Mintes+":"+seconds)+"</date>";
f1.writeLine(str);

str = "<content>"+form1.content.value+"</content>";
f1.writeLine(str);

str = "</info>";
f1.writeLine(str);

str = "</leaveWordInfo>";
f1.writeLine(str);
f1.Close();
}

alert("留言成功!");
// location.href="../default.html";
return true;
}
}

// 此方法判断该 XML 是否存在
function getFile(filename)
{
if(!fso.FileExists(filename)){
// 不存在该文件
return "not exists";
}
else
{
return "exists";
}
}
</script>

Ghost_520 2008-11-04
  • 打赏
  • 举报
回复
FSO 确实是再网页中不太安全,而且没当你运行脚本时,都会提示一个 ActiveX 安全脚本运行的提示。创建 FSO 不紧要降浏览器的安全性降低,而且还要设定浏览器的 “跨域访问权限” ,只有设置这个权限才能创建出 FSO 对象。

给你一个我创建 FSO 的程序片段:
这就是一个使用 FSO 静态完成用户留言,使用 FSO 将用户的留言存储到 XML 文档中.里面涉及到 FSO 的一些对文件的操作和 JS DOM 的操作。
如果你想在 JS 中判断文件的大小是可以实现的,首先你根据 file 对话框可以获取文件的路径,在使用 FSO 利用这个路径来创建这个文件的对象,使用 size 属性(对于文件,返回指定的文件的大小,以字节为单位。对于文件夹,返回文件夹所包含的所有文件和子文件夹的大小,以字节为单位。) 获得该文件的大小。剩下的任务你可以自己完成了吧!还有就是如何设定 FSO 的环境:设定 IE 浏览器安全性低是不够的 ,还要设置 IE 浏览器 “跨域访问权限” ,因为 FSO 是使用客户端的代码来范围客户端的文件,所以一定要有个跨域访问权限。,请操作我给别人回答的一封帖子来参照如何设定 FSO http://topic.csdn.net/u/20080908/09/1d9e9cd3-8dca-46ad-a722-3ae88d5301af.html

最后 FSO 是不安全的 actionx 控件,用不用你自己决定,反正你的问题可以解决!

87,924

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧