FileUpload - 验证是否已上载实际文件

时间:2009-03-10 20:14:05

标签: c# .net file-upload

我的网络表单上有一个FileUpload控件(FileUpload1),还有一个“Sumbit”按钮,一个标签和一个包含UserID的隐藏字段。我在按钮的点击事件中有以下代码:

string path = Server.MapPath("~/userfiles/");

if (FileUpload.HasFile)
{
    try 
    {
        FileUpload1.SaveAs(path + UserID.Value + "/image.jpg");
    }
    catch 
    {
        Label1.Text = "* unable to upload file";
        Label1.Visible = true; 
    }
}

如果我上传实际文件,它会很有用。但是,如果我在FileUpload的文本框中键入一个不存在的文件名(例如,“c:\ a.jpg”,我的计算机上不存在),然后单击Sumbit按钮,HasFile仍然返回true。此外,SaveAs()不会抛出任何异常,它是一个void函数,不返回表示成功或失败的值。如何判断文件是否实际上传?

5 个答案:

答案 0 :(得分:8)

只需检查它是否存在。

if(File.Exists(myFile)){
  //it was uploaded.
}

答案 1 :(得分:4)

您可以检查FileUpload.PostedFile.ContentLength属性

答案 2 :(得分:2)

在调用SaveAs之前,您可以使用File.Exists检查文件是否存在。

答案 3 :(得分:1)

嗯....

不确定我理解。首先,在您的代码中,FileUpload.HasFile将无法编译。如果应该是FileUpload1.HasFile。

当我更正此问题并运行您的代码时,如果该文件不存在,此行将返回false ...

使用File.Exists(路径)上传后,您可以检查文件是否存在;文件对象是System.IO的一部分。

答案 4 :(得分:1)

这与您的实际问题无关,但您应验证任何用户输入,尤其是当您希望用户将文件上传到网络服务器上的虚拟文件夹时。您至少应该检查文件的内容类型是否是您期望的,或者 - 更好的是,使用.NET框架中可用的类过滤(调整大小)图像。

如果您不这样做,用户可能会通过您的网站分享任意内容,或者在您的服务器上放置恶意文件(例如包含可能由某些网络浏览器执行的脚本的图片)。

通过附加验证,您还可以验证是否确实发送了内容。

AND:当您通过连接表单字段的输入来构建保存路径时,会打开一个非常严重的漏洞(我假设UserID.Value是您提到的POST参数?)。这允许用户决定在服务器上存储内容的位置,更糟糕的是,能够覆盖现有文件!!!