当前位置:编程学习 > C#/ASP.NET >>

Asp.net文件上传之前获取文件的大小

通常步骤是这样的:
1、用户选择文件;
2、点击某个回传按钮后,页面提交,在后台进行处理。

但是,步骤2的时候,实际上文件已经被上传至缓存了。

我希望能够在步骤2的时候,阻止文件被上传(我可以做一些文件大小方面的限制,在允许范围内才可以上传,否则就阻止该文件上传)


我尝试过在 HttpModule和Global.asax 里进行控制,但是都无法阻止文件被上传。

望高手指点一下。 

--------------------编程问答--------------------   我都是在后台判断文件大小的。文件过大,就不处理了。返回告知用户文件过大。 --------------------编程问答-------------------- js 获取文件大小 

<SCRIPT LANGUAGE="JavaScript">
function getFileSize(fileObj) 
{
 var fso = new ActiveXObject('Scripting.FileSystemObject');
 var file = fso.GetFile(fileObj.value);
 var fileSize = file.Size ;

 alert(fileSize/1024/1024);
 

   
 if((fileSize/1024) < 1024){
  alert(fileSize/1024+"K");
 }else if( ((fileSize/1024) > 1024) && ((fileSize/(1024*1024)) < 1024)){
  alert(fileSize/(1024*1024)+"M");
 }else{
  alert(fileSize/(1024*1024*1024)+"G")
 }

    
}  
</SCRIPT>
<input type="file" onchange="getFileSize(this);" />

http://ss3025.iteye.com/blog/1133434

--------------------编程问答-------------------- 使用Silverlight或者SWFUpload实现,上传控件实现不了 --------------------编程问答--------------------
         #region 上傳EXCEL文件
            ArrayList excelType = new ArrayList();//文件类型
            excelType.Add("application/vnd.ms-excel");
            string name = fileUpxls.FileName;
            string[] arrName = name.Split('.');
            NewExcelName = arrName[0] + "_" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + rd.Next(11, 99).ToString() + "." + arrName[1];
            int size = fileUpxls.PostedFile.ContentLength;//获取文件大小,自行判断或限制即可
            string type = fileUpxls.PostedFile.ContentType;
            savepath = Server.MapPath("~/Products") + "\\" + NewExcelName;
            hfExcelName.Value = savepath;
            if (excelType.Contains(fileUpxls.PostedFile.ContentType))
            {
                fileUpxls.SaveAs(savepath);
                btnSaveDB.Visible = true;
                strMessage = "恭喜,商品訊息上傳成功!";
                MessageBoxHelper.Show(this, strMessage);
            }
            else
            {
                strMessage = "Sorry,文件上傳格式不正確或要上傳的文件在打開狀態,請確認!";
                MessageBoxHelper.Show(this, strMessage);
            }
            #endregion
--------------------编程问答-------------------- 先感谢一下以上4位的回答。
glasses1999:
我就是想避免这种情况,因为到达后台的时候,文件其实已经上传到服务器的内存里了,
如果文件太大,好不容易上传完之后,告诉用户文件太大。。这个体验不太好。。

highpr:
js+ActiveX方法我想过,但是因为局限性太大
1、只能在IE下;
2、new ActiveXObject('Scripting.FileSystemObject');的时候,如果浏览器的安全性选项没有打开的话,应该会提示无法创建(至少也会提示需要用户同意)。
想顺利使用的话必须要降低浏览器安全性选项,倒不是说多么不安全,而是对用户来说太烦了。我公司网站的用户都是不怎么懂电脑的人。。。

net_lover:
这是最后不得已的选择了。

yanlele424:
非常感谢你的帮助,但是和我的需求还是有不小的差距。我的本意是:在HttpRequest发起的时候截取到这个Request,然后对Request进行处理,使得它能够不上传文件。 --------------------编程问答-------------------- http://www.open-open.com/home/space-668-do-blog-id-741.html
看看有木有你要的 --------------------编程问答--------------------
引用 3 楼 net_lover 的回复:
使用Silverlight或者SWFUpload实现,上传控件实现不了

+++ --------------------编程问答--------------------
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,