问题描述
|
我使用AsyncFileUpload以便允许用户异步上传文件。
我想将文件大小限制为1MB。
据我所知,我只能在上传完成后获得文件的长度
例如开始上传时:
(OnClientUploadStarted)
function UploadStarted(sender,args)
{
//if bigger than 1MB (approximately)
if (args.get_length() > 1000000 )
{
ShowActionNotificationError( errorMessage);
return false;
}
}
args.get_length()为null,所以我不能使用它...
上载完成后:
(OnClientUploadComplete)
function UploadComplete(sender,args)
{
//if bigger than 1MB (approximately)
if (args.get_length() > 1000000 )
{
ShowActionNotificationError( errorMessage);
return false;
}
}
正常,但文件已上传...
那么,在上传之前如何知道文件的大小?我是否缺少一些简单的东西?
我真的很想在不处理HTTP请求长度和排序的情况下做到这一点。
谢谢!
解决方法
经过大量的研究,我意识到使用AJAX无法做到这一点。
当我环顾Yahoo Mail和gmail等网站时,它是由Flash完成的。
在hotmail中,它是通过Silverlight完成的。
有一个免费的(目前)Flash上传控件,名为Uploadify...。
我现在正在整合它。
如果我错了,请纠正我! :)
, 您可以在客户端的Upload Start事件中执行此操作。
if (sender._inputFile.files[0].size >= maxFileSize) {
sender._stopLoad();
}
_stopLoad将调用您的Upload Error事件。
, 您可以在服务器端通过FileUploadComplete
方法检查其大小
void FileUploadComplete(object objSender,AsyncFileUploadEventArgs e)
{
if (e.get_length() > 1000000 )
{
ShowActionNotificationError( errorMessage);
return false;
}
}
, 是的,密瑟尔说的是正确的。使用HTML控件提供现代用户体验确实很麻烦。
另一种选择是SWFUpload
, 如果您需要在内容实际上传到服务器之前检查文件大小,那么最好使用ASP组件FileUpload。使用此工具,您可以检查并决定是否要上传文件。
If FileUpload1.FileContent.Length <= DesiredFileSize Then
<<Code to Upload the file>>
End If
, CERO 2月14日\ '12在5:51
FileUpload1 no可用于UpdatePanel:
与UpdatePanel控件不兼容的控件
以下ASP.NET控件与部分页面更新不兼容,因此不能在UpdatePanel控件中使用:
在几种情况下的Treeview控件。一种是当回调是
已启用,但不属于异步回发。另一个是什么时候
您直接将样式设置为控件属性,而不是隐式设置
通过使用对CSS样式的引用来对控件进行样式设置。另一个是
当EnableClientScript属性为false时(默认值为true)。
另一个是如果您更改EnableClientScript属性的值
异步回发之间。
直接将样式设置为控件属性时的菜单控件
而不是通过使用对CSS的引用来隐式设计控件的样式
样式。
FileUpload和HtmlInputFile控件何时用于上传
文件作为异步回发的一部分。
GridView和DetailsView控件何时
EnableSortingAndPagingCallbacks属性设置为true。默认值
是错误的。
登录,密码恢复,ChangePassword和CreateUserWizard控件
其内容尚未转换为可编辑模板。
替代控件。
要在UpdatePanel控件内使用FileUpload或HtmlInputFile控件,请将提交文件的回发控件设置为面板的PostBackTrigger控件。 FileUpload和HtmlInputFile控件只能在回发方案中使用。