首页 新闻 搜索 专区 学院

求助:文件上传 当文件大小大于限制时弹出提示框

0
悬赏园豆:200 [已关闭问题]
<table class="mtxt" cellspacing="0" cellpadding="0"> <tbody> <tr> <td id="body"><!-- google_ad_section_start --> <div class="msgfont">我用FileUplod控件实现一个文件上传的页面,当文件大于4M时,我想弹出一个"上传文件不能大于4M的提示框",怎么实现呢?如果是需要修改webconfig配置文件和更改浏览器设置的实现就请不要发了,谢谢</div> </td> </tr> </tbody> </table>
as605的主页 as605 | 初学一级 | 园豆:0
提问于:2009-12-24 11:08
< >
分享
其他回答(7)
0

http協議最大length才2G啊.

httpmoudle獲得

woody.wu | 园豆:3621 (老鸟四级) | 2009-12-24 11:26
我的限制才4M,但我不希望修改webconfig,如果在客户端用JavaScript判断不用修改浏览器配置也行
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 11:30
@as605:考慮用flash上傳控件,FileUplod基於安全性考慮,好象不行
支持(0) 反对(0) woody.wu | 园豆:3621 (老鸟四级) | 2009-12-24 11:36
@as605:asp.net默認是4M,如果不修改webconfig的話,則asp.net自動放棄生成html頁的,直接會到 "無法找到網頁的錯誤" 葉面
支持(0) 反对(0) woody.wu | 园豆:3621 (老鸟四级) | 2009-12-24 11:38
请问用httphander和httpmodule能获得文件大小吗
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 12:17
@as605:httpmodule可以的獲得的, 看看這個 http://www.cnblogs.com/bashan/archive/2008/05/14/1196054.html
支持(0) 反对(0) woody.wu | 园豆:3621 (老鸟四级) | 2009-12-24 12:25
@woody.wu:前一久看过一点,看来实现的难度还不小啊
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 12:36
@woody.wu:httpmodule寫的話,最後還是要修改web.config裡面
支持(0) 反对(0) woody.wu | 园豆:3621 (老鸟四级) | 2009-12-24 12:36
@woody.wu: 那你做文件上传是用的flash上传控件吗
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 12:41
@as605: 我的 一般都是直接用FileUplod來的。要是使用flash的話, 用swfupload 這個看看,網上也比較多教程,開源的。
支持(0) 反对(0) woody.wu | 园豆:3621 (老鸟四级) | 2009-12-24 13:01
@woody.wu: 那你用FIleUpload是把webconfig的文件大小设置设得很大来处理的吗
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 13:03
@as605:是的啊,目前我也沒有找到其他的辦法了。 <httpRuntime maxRequestLength="409600" executionTimeout="600" useFullyQualifiedRedirectUrl="false"/>,不知道有沒有其他的辦法
支持(0) 反对(0) woody.wu | 园豆:3621 (老鸟四级) | 2009-12-24 13:09
0
代码
#region Methods
private string checkFileVality()
{
string result="";
long truelength=FileUpload1.PostedFile.ContentLength;//文件长度(以字节为单位)。

int Mylen=4;//4M
long len=0;
try
{
len
=Mylen*1024*1024;
}
catch
{
len
=Convert.ToInt64(1024*1024*4);
}
if(truelength>len)
{
result
= "文件大小不能超过规定的"+Mylen+" M!";
}
return result;
}

#endregion

 

这是在上传前判断的。可以用Iframe页面

邀月 | 园豆:25375 (高人七级) | 2009-12-24 11:39
如果大于限制,就直接报错了,执行不到上传页面
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 12:14
0

在上传时读到文件的大小呀, 当大过你设定的时候你就弹出提示, 像QQ校友里面那个头像那个, 要大于30K, 又要小于300K, 不然的就提示

风浪 | 园豆:2866 (老鸟四级) | 2009-12-24 12:33
0

 
            if (FileUpload1.PostedFile.ContentLength > 1024 * 1000 * 4)
            {
                str = "上文件大小超过限定值!(最大<b>" + CaculatorSize(1024 * 1000 * 4) + "</b>)";
                return;
            }

 

public string CaculatorSize(int s)
        {
            if (s < 1024)
            {
                return s + " B";
            }
            if (s / 1024 < 1024)
            {
                return s / 1024 + " KB";
            }
            if (s / 1024 / 1024 < 1024)
            {
                return s / 1024 / 1024 + " M";
            }
            if (s / 1024 / 1024 / 1024 < 1024)
            {
                return s / 1024 / 1024 / 1024 + " G";
            }
            else
            {
                return "";
            }
        }

那么给你另外一个方案

 

http://www.cnblogs.com/cloudgamer/archive/2008/10/20/1314766.html

persialee | 园豆:3217 (老鸟四级) | 2009-12-24 12:58
代码写的不错,但很遗憾解决不了我的问题
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 13:06
@as605:那么给你另外一个推荐 http://www.cnblogs.com/cloudgamer/archive/2008/10/20/1314766.html
支持(0) 反对(0) persialee | 园豆:3217 (老鸟四级) | 2009-12-24 13:30
0

对于这种情况我做的是,用一个隐藏域或把一个控件隐藏,在服务器端得到大小后,把这个大小赋给这个隐藏域

然后写一个 js 脚本去读取这个隐藏域的值,如果大于 4M ,则弹出提示框

应该可以解决你的问题吧

zziss | 园豆:215 (菜鸟二级) | 2009-12-24 13:15
服务器端能获得文件大小并赋给隐藏域吗,asp.net默認是4M,如果不修改webconfig的話,則asp.net自動放棄生成html頁的,直接會到 "無法找到網頁的錯誤" 葉面
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 13:21
0

1.使用js检测文件长度,然后自己判断

2.在web.config中修改上传最大长度,防止客户端作弊。

JS代码:可将其复制到htm中测试

<HTML><HEAD> 
<SCRIPT> 

function   getFileSize   (fileName)   {    
 if   (document.all)   { 
  window.oldOnError   =   window.onerror;         
  window.onerror   =   function   (err)   { 
   if   (err.indexOf('utomation')   !=   -1)   { 
    alert('没有访问文件的权限');                 
    return   true;             
   }           
   else   
    return   false;         
   }; 
         var   fso   =   new   ActiveXObject('Scripting.FileSystemObject'); 
         var   file   =   fso.GetFile(fileName);         
  window.onerror   =   window.oldOnError; 
         return   file.Size;    
 }

</SCRIPT> 
</HEAD> 
<BODY> 
<FORM   NAME="formName"><INPUT   TYPE="file"   NAME="fileName" OnChange="alert(getFileSize(this.form.fileName.value))"><BR> 
</FORM>
</BODY> 
</HTML>

Aicken(李鸣) | 园豆:480 (菜鸟二级) | 2009-12-24 13:29
这样应该能实现,但需要更改浏览器的设置吧
支持(0) 反对(0) as605 | 园豆:0 (初学一级) | 2009-12-24 13:49
0

#region Methods
       
private string  checkFileVality()
        {
           
string result="";
           
long truelength=FileUpload1.PostedFile.ContentLength;//文件长度(以字节为单位)。

           
int Mylen=4;//4M                   
            long len=0;
            
try
            {
                len
=Mylen*1024*1024;
            }
           
catch
            {
                len
=Convert.ToInt64(1024*1024*4);
            }
           
if(truelength>len)
                {
                result
= "文件大小不能超过规定的"+Mylen+" M!";
                }
               
return result;
        }

#endregion

Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "alert('"+result+"');", true);

 

学而思,不进则退 | 园豆:419 (菜鸟二级) | 2009-12-24 14:01
0

 if(truelength>len)
                {

                  string    msg="文件大小不能超过规定的4M!"

                  page.RegisterStartupScript("message", "<script language='javascript' defer>alert     ('" + msg+ "');</script>");
               
     return ;

                }
              

tyqing | 园豆:240 (菜鸟二级) | 2009-12-25 11:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册