C# asp.net中的文件上载
我使用FileUpload控件在我的网站上方便上传图像文件。 我想限制用户只上传图像文件。 我正在使用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
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
}