如何在ASP.NET AJAX控件工具包中的AsyncFileUpload文件浏览菜单中限制文件类型

7

我希望限制用户在文件上传对话框中看到的内容,默认情况下为“所有文件”。我知道如何验证他们只上传了某种文件类型,这不是问题所在。我只想知道如何将文件类型默认为文件选择对话框中的“PNG only”或“*.png”。

是否有任何方法可以实现这一点?

这是在ASP.NET AJAX控件工具包中使用AsyncFileUpload。

3个回答

10
这个对我有效(感谢DavRob的启发)。
<cc1:AsyncFileUpload ID="FileUpload" runat="server" 
  OnClientUploadStarted="AssemblyFileUpload_Started" />

<script>
function AssemblyFileUpload_Started(sender, args) {
    var filename = args.get_fileName();
    var ext = filename.substring(filename.lastIndexOf(".") + 1);
    if (ext != 'png') {
        throw { 
            name:        "Invalid File Type", 
            level:       "Error", 
            message:     "Invalid File Type (Only .png)",
            htmlMessage: "Invalid File Type (Only .png)" 
        }
        return false;
    }
    return true;
}
</script>

1
它可以工作,但是除非您订阅OnClientUploadError事件并对其不做任何操作,否则它会在屏幕上抛出警报。 - Mateus Schneiders

3
您可以使用控件上的OnClientUploadStart属性来触发JavaScript函数进行验证,如下所示:
<cc1:AsyncFileUpload ID="FileUpload" runat="server" 
  OnClientUploadStarted="checkExtension" />

然后在您的页面或包含的页面中添加以下脚本:

function checkExtension(sender, args) {
  var ext = args.get_fileName().substring(filename.lastIndexOf(".") + 1);
  if (ext != 'png') {
    args.set_cancel(true);                           //cancel upload
    args.set_errorMessage("File type must be .png"); //set error message
    return false;
  }
  return true;
}

在这种情况下,我们只是使用客户端API的各种部分来获取/检查扩展名,如果无效,则返回false并停止上传/设置错误消息(可选)。


2
这会停止加载,但会抛出一个丑陋的“不支持”错误,因为 set_cancel 不存在。这非常接近解决方案,但需要抛出自定义异常而不是调用 set_*** 函数。 - daniloquio

2

ajax控件工具包的当前版本没有这个选项。

但好消息是,您可以获取源代码并添加一个属性来处理此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接