asp.net中的文件上传

时间:2010-05-28 12:10:16

标签: c# .net asp.net file-upload

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

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

            } 

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

6 个答案:

答案 0 :(得分:1)

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

有点像:

 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
  }

答案 1 :(得分:1)

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

public static readonly string[] _imageMimeTypes = new[] { "image/jpeg", "image/png" };

然后测试发布的内容类型是否在此数组中:

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

答案 2 :(得分:0)

我希望这会帮助你。请尝试以下代码。

    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);  
       }  
   }  

答案 3 :(得分:0)

上述解决方案的唯一问题是,在检查文件类型之前,必须先将文件上传到服务器。

如果你在onSubmit调用中放了一些Javascript,你可以读取文件名并在那里测试,如果它不是有效的文件名则返回false。

这对您的带宽更加友好。

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

然后

function submit(form) {
  var fileName = $('#inputControl').val().replace(/.*(\/|\\)/, '');
  // check the filename here, return false if its not an image.
}

答案 4 :(得分:0)

检查文件名对抗正则表达式以匹配图像文件扩展名是不合适的。黑客可以使用此功能来宣传他们的网站。我亲身经历过。所以,这里是你如何确定上传的文件是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

答案 5 :(得分:0)

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

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

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