【问题标题】:How can i upload only jpeg files?我怎样才能只上传jpeg文件?
【发布时间】:2011-06-09 19:45:44
【问题描述】:

我想上传只有 jpeg、jpg 等格式的文件。但我无法在打开的窗口中过滤文件。我想在 asp.net 中将文本“所有文件”更改为 jpeg 等。 (C#)

【问题讨论】:

  • 我相信应该可以检查上传文件的 MIME 类型。使用 PHP 是可能的,所以使用 asp.net 是不可能的,这将是令人惊讶的。至于您如何做到这一点-抱歉,我不是提供答案的人:(。
  • 无论您如何进行服务器端验证,您可能还需要考虑检查该文件是否实际包含 JPG(即,它不仅仅是另一种具有 .jpg 扩展名的文件类型)。跨度>

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


【解决方案1】:

这在当前的 HTML 版本中是不可能的。

您应该在服务器端检查上传的文件类型。

【讨论】:

  • 有可能,只需要 javascript/workaround。但归根结底,你是对的,在它已经上传之前你无法确认它。需要注意的是,验证服务器端以确认文件只是一个图像(用于格式错误的 POST 保护目的)仍然是一个好主意
  • 你是对的,你可以检查选定的文件,但你不能在文件选择对话框中设置文件过滤器。
【解决方案2】:
【解决方案3】:

您可以使用 RegularExpressionValidator 来验证用户是否尝试上传 jpeg 文件:

<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" 
 Text="Upload File" />&nbsp;<br />
<br />
<asp:Label ID="Label1" runat="server"></asp:Label>
<asp:RegularExpressionValidator 
 id="RegularExpressionValidator1" runat="server" 
 ErrorMessage="Only jpeg files are allowed!" 
 ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))
    +(.jpg|.JPG|.jpeg|.JPEG)$" 
 ControlToValidate="FileUpload1"></asp:RegularExpressionValidator>
<br />
<asp:RequiredFieldValidator 
 id="RequiredFieldValidator1" runat="server" 
 ErrorMessage="This is a required field!" 
 ControlToValidate="FileUpload1"></asp:RequiredFieldValidator>

在服务器端:

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            string fileExt = 
               System.IO.Path.GetExtension(FileUpload1.FileName);

            if (fileExt == ".jpeg" || fileExt == ".jpg")
            {
                //do what you want with this file
            }
            else
            {
                Label1.Text = "Only .jpeg files allowed!";
            }
        }
        else
        {
            Label1.Text = "You have not specified a file.";
        }
    }

您应该知道任何用户都可以更改扩展名 f.e.从 .exe 到 .jpg。我知道检查真实文件类型的唯一方法是使用来自Urlmon.dll 的函数。如果您想了解更多信息,请查看这个 SO-question:Using .NET, how can you find the mime type of a file based on the file signature not the extension

【讨论】:

  • +1 用于服务器和客户端验证,在本机 ASP 中。
  • 您应该重命名这些控件/方法。 :)
  • 这只是一个例子,OP没有提供任何标记,所以我使用了这个“匿名”控件;-)
猜你喜欢
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2014-05-15
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多