我正在使用FileUpload控件来方便我的网站上传图像文件。 我想限制用户只上传图像文件。 我正在使用
if (fupFirmLogo.PostedFile.ContentType == "image/Jpeg")
{
}
检查文件是否是图像。我想允许所有图像扩展,如PNG,GiF,Jpeg,tif,BMP等。我该怎么做。
答案 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 /”开头的文件,即所有图像。