C# asp.net中的文件上载

C# asp.net中的文件上载,c#,.net,asp.net,file-upload,C#,.net,Asp.net,File Upload,我使用FileUpload控件在我的网站上方便上传图像文件。 我想限制用户只上传图像文件。 我正在使用 if (fupFirmLogo.PostedFile.ContentType == "image/Jpeg") { } 检查文件是否为图像。我想允许所有图像扩展,如PNG、GiF、Jpeg、tif、BMP等。我应该如何做。您应该使用正则表达式验证该图像是否为图像,这可能是更好的选择 比如: public static bool IsV

我使用FileUpload控件在我的网站上方便上传图像文件。 我想限制用户只上传图像文件。 我正在使用

 if (fupFirmLogo.PostedFile.ContentType == "image/Jpeg")
            { 

            } 

检查文件是否为图像。我想允许所有图像扩展,如PNG、GiF、Jpeg、tif、BMP等。我应该如何做。

您应该使用正则表达式验证该图像是否为图像,这可能是更好的选择

比如:

 public static bool IsValidImage(this string fileName)
    {           
        Regex regex = new Regex(@"(.*?)\.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF|bmp|BMP)$");
        return regex.IsMatch(fileName);
    }
然后你检查:

if (fupFirmLogo.FileName.IsValidImage())
{
    //Do your code
}
else
 {
    //Not a valid image
  }

您可以定义已知图像类型的数组:

public static readonly string[] _imageMimeTypes = new[] { "image/jpeg", "image/png" };
然后测试发布的内容类型是否在此数组中:

if (_imageMimeTypes.Contains(fupFirmLogo.PostedFile.ContentType))
{
    // ...
}

我希望这能帮到你。试试下面的代码

    Image uploadedImage = null;  
    if (ImageUpload.HasFile && ImageUpload.FileName != string.Empty && ImageUpload.FileContent.Length > 0)  
    {  
        try  
        {  
            uploadedImage = Image.FromStream(ImageUpload.PostedFile.InputStream);  
        }  
        catch (Exception ex)  
        {  
            lblUploadStatus.Text = "Selected file is not an image.<br />" + ex.Message;  
       }  

       if (uploadedImage != null)  
       {  
           string savePath = string.Format("{0}/{1}", Server.MapPath("~/images/orig/upload_temp"), ImageUpload.FileName);  
           uploadedImage.Save(savePath, ImageFormat.Jpeg);  
       }  
   }  
图像上传图像=null;
if(ImageUpload.HasFile&&ImageUpload.FileName!=string.Empty&&ImageUpload.FileContent.Length>0)
{  
尝试
{  
UploadeImage=Image.FromStream(ImageUpload.PostedFile.InputStream);
}  
捕获(例外情况除外)
{  
lblUploadStatus.Text=“所选文件不是图像。
”+例如消息; } 如果(UploadeImage!=null) { string savePath=string.Format(“{0}/{1}”、Server.MapPath(“~/images/orig/upload\u temp”)、ImageUpload.FileName); UploadeImage.Save(保存路径,ImageFormat.Jpeg); } }
上述解决方案的唯一问题是,必须先将文件上载到服务器,然后才能检查其文件类型

如果在onSubmit调用中放入一些Javascript,则可以读取文件名并在那里进行测试,如果文件名无效,则返回false

这将对您的带宽更加友好

<form method="post" enctype="multipart/form-data" onsubmit="return submit(this)">
  <input id="inputControl" name="file" type="file" />
</form>

根据正则表达式检查文件名以匹配图像文件扩展名是不合适的。黑客可以使用此功能来推广他们的网站。我亲身经历过。下面是如何确保上传的文件是VB.net中的图像:

  Public Function IsFileAnImage(ByRef uploadedFile As HttpPostedFile) As Boolean
    Try
      Dim uploadedImage As Drawing.Image = Drawing.Image.FromStream(uploadedFile.InputStream)
      uploadedImage.Dispose()
      Return True
    Catch
      Return False
    End Try
  End Function

我知道这是旧的,但只是验证内容类型。内容类型只是一个字符串

if (fupFirmLogo.PostedFile.ContentType.Contains("image/")
{ 
   //This is an Image
}
else
{
  //not and image
}

这将允许任何内容类型以“image/”开头的文件,即所有图像

用户不能随意更改文件的扩展名,即从.exe更改为.jpeg。我认为,这种方法会允许它。同意这可能有一个漏洞。不过我喜欢正则表达式的想法。在fupFirmLogo.PostedFile.ContentType上包含regex以检查“^image/+$”是否可以消除任何漏洞?右键单击,将.exe更改为.jpg。文件内容是相同的,它现在看起来只是一个图像。你不是真的要把exe转换成jpg.Darin,我认为把你的想法和anishMarokey的结合起来是最好的方法。检查MIME类型,但要从公共类进行检查,以使其可重用。这是我们在文件上载控件上使用的方法。这里仍然存在我将.exe重命名为.jpg的问题。这可能会捕获99%的内容,但仍然需要服务器端验证。还有,那些关闭JS的呢?然后它仍然会发布文件-主要的是,尽管在大多数情况下,这将减少带宽开销。我仍然希望看到上面的Image.FromStream解决方案,但以这种方式开始可以省力地解决很多潜在问题。
if (fupFirmLogo.PostedFile.ContentType.Contains("image/")
{ 
   //This is an Image
}
else
{
  //not and image
}