我正在使用FileUpload控件來方便在我的網站上上傳圖片文件。 我想限制用戶只上載圖像文件。 我正在使用asp.net中的文件上傳
if (fupFirmLogo.PostedFile.ContentType == "image/Jpeg")
{
}
檢查文件是否爲圖像。我想要允許所有圖像擴展名,如PNG,GiF,Jpeg,tif,BMP等。我應該怎麼做。
我正在使用FileUpload控件來方便在我的網站上上傳圖片文件。 我想限制用戶只上載圖像文件。 我正在使用asp.net中的文件上傳
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))
{
// ...
}
達林,我認爲結合你的想法和anishMarokey's是最好的選擇。檢查MIME類型,但是從通用類中這樣做,以便它可以重用。這是我們在文件上傳控件上使用的方法。 – Tommy 2010-05-28 13:21:28
我希望這將幫助你。嘗試下面的代碼。
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);
}
}
上述解決方案的唯一問題是該文件必須先上載到服務器,然後才能檢查其文件類型。
如果您在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.
}
你仍然有我在這裏重命名一個.exe到.jpg問題。這可能會抓住99%的東西,但你仍然需要服務器端驗證。另外,那些關閉JS的呢? – Tommy 2010-05-28 13:22:31
然後它仍然會發布文件 - 主要的是雖然大多數情況下這會減少帶寬開銷。我仍然在上面的Image.FromStream解決方案,但以這種方式開始可以省略很多潛在的問題。 – 2010-05-28 13:37:43
檢查,對正則表達式匹配的圖像文件的擴展名的文件名是不恰當的。黑客可以使用此功能來宣傳他們的網站。我親身體驗過它。所以,這裏是你如何使它肯定的是,上傳的文件是在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
}
這將允許具有內容類型從開始「圖像/」,其任何文件是所有圖像。
用戶無法有意修改文件的擴展名,即從.exe到.jpeg。我認爲,這種方法將允許它。 – 2010-05-28 12:17:50
我覺得沒有。你怎麼能把一個.exe改成.jpg? – anishMarokey 2010-05-28 12:44:08
同意這可能有一個漏洞。儘管我喜歡這個正則表達式。將包括fupFirmLogo.PostedFile.ContentType的正則表達式來檢查「^ image /.+$」是否消除了任何漏洞? – Eddie 2010-05-28 12:57:41