在Internet Explorer上,标准HTML文件上载表单还允许直接输入文件名(而不是使用文件选择器对话框)。这样就可以输入不存在的文件。在其他浏览器上(不允许你这样做)我想如果在选择文件后删除文件,仍然会出现这种情况。
为了处理由此问题引起的错误(如this one),我需要在服务器端添加一些验证代码(只有在请求实际进入服务器时才有可能,我目前还不确定,或者在客户端(由于您无法从JavaScript沙箱访问实际文件,因此不能非常简单)。除此之外,唯一(也可能是最佳)选项似乎是用CSS魔术隐藏输入框,就像GMail用于附件文件一样。
那么,当您尝试上传不存在的文件时会发生什么? 是否还有POST请求被发送?或者浏览器是否会中止,如果是,我该如何检测?
答案 0 :(得分:2)
我想我已经明白了。
首先,无论是不存在的文件,还是整个路径不正确,似乎都有所不同。如果只缺少文件,显然会发生POST。
至少在我提到的情况下(WinXP和IE6上的FCKEditor的图像上传对话框),浏览器根本不提交表单(因此没有任何东西可以在服务器端完成)。
可以通过不使用普通表单提交来检测客户端上的问题,但是通过使用onSubmit处理程序来停止提交(返回false),而是使用form.submit()提交表单本身。如果文件丢失,则会有例外。
try{
form.submit();
}
catch (e){
// show some error message
}
return false;
答案 1 :(得分:0)
非常好的问题,在.net中有Request.IsClientConnected,但不知道在这种情况下这是否适合您,或者您是否首先使用.net。
我会尝试通过客户端的Fiddler和服务器端的WireShark运行它,看看你是否通过查看流量模式得到任何见解。然后,您可以找出如何检测这一点。
有兴趣看看你想出了什么。抱歉无法给出更好的答案。
答案 2 :(得分:0)
发布帖子但是,至少在.Net中,System.Web.UI.WebControls.FileUpload控件有一个为False的HasFile属性(我试图上传c:\ tmp \ foo.pdf)。在处理之前检查该属性可以防止因丢失文件而导致的任何错误。