使用FileUpload上传并预览图片

来源:互联网 发布:女人床上魅惑男人知乎 编辑:程序博客网 时间:2024/04/30 14:49

 

在Save按钮的btnSave_Click事件处理程序中,FileUpload控件的HasFile属性用于检测文本框中是否输入了有效的完全限定文件名。如果文本框为空或输入的名称无效,将不会通过检测,并且lblMessage将显示“No file upladed”。

  假定上传了一个有效文件,那么将执行try代码块中的代码。关键语句是调用File- Upload控件的SaveAs方法。该方法使用硬编码路径和FileName属性传递一个完全限定的文件名。该语句可能会由于各种原因而失败,包括磁盘空间不足、无效的路径或安全问题(稍后会有更详细的说明)。

  如果SaveAs方法失败,则执行catch代码块。在lblMessage中显示一个错误信息,包括该异常的Message属性ex.Message。

  如果SaveAs方法执行成功,关于上传文件的多个信息将显示在lblMessage中,这些信息通过FileUpload.PostedFile(类型为HttpPostedFile)中的属性获取。

  Display按钮的Click事件处理程序与前面的类似,只不过它不是显示文件信息,而是显示文件内容。它通过使用FileContent属性获取表现为Stream对象的上传文件的内容,然后这个Stream对象被用于实例化一个StreamReader对象。StreamReader的Read- Line方法逐行的遍历文件,然后把合并后的字符串显示在lblDisplay中。

  当在讨论从客户端上传文件到web服务器时,安全是非常让人关注的。须注意两点,首先,使用这种方式会公开web服务器,从而会有非常大的安全漏洞,为此要特别细心。因为这样不仅可以上传病毒,木马和其他恶意软件,还会存在客户端浏览web服务器目

  录结构的危险。因此,应该使用硬编码目标目录,至少严格限定在哪里保存上传的文件。

  另外,要注意的一点是,允许在磁盘写文件所必需的权限。在开发web应用程序时,一般情况下,开发机器同时也是web服务器,特别是使用VS2005默认的开发模式。在该模式下使用的是内置的web服务器,并且不通过IIS访问网站而是由文件系统访问网站。这样,永远也不会有权限问题。

  然而,当网站部署到产品服务器上,且该网站通过IIS和虚拟目录来访问时,就会出现问题。这是因为运行ASP.NET的账户必须拥有对用于保存上传文件的目录的写权限。在Windows2000/XP中,账户的名称是ASPNET。在Windows Server2003中,写权限必须分配给IIS_WPG账户组。

  利用FileUpload控件并结合良好的安全防护,用户可以把自己的文件传送到网站,以丰富网站功能。

 

 

下面就是FileUpload控件:
<div>
            <asp:FileUpload ID="fulFile" runat="server" onchange="PreviewImg(this)" />
            <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="上传" />&nbsp;
</div>

这里的层用来预览图片:
<div id="newPreview"></div>

因为安全性问题,IE7禁用了image控件引用本地图片,以下是解决方案
在<head></head>之间添加如下代码:
<style type="text/css">
    #newPreview {
        FILTER: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)
    }
</style>

<script language="javascript" type="text/javascript">
       function PreviewImg(imgFile)
        {   
            var newPreview = document.getElementById("newPreview");
            newPreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgFile.value;
            newPreview.style.width = "800px";
            newPreview.style.height = "720px";
        }
 </script>   
 
btnUpload click 事件:
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        string path = Server.MapPath("~/Image/");
        if (this.fulFile.HasFile)
        {
            string fileException = System.IO.Path.GetExtension(fulFile.FileName).ToLower();

            if (fileException.Equals(".jpg"))
            {
                this.fulFile.SaveAs(path + fulFile.FileName);
                Response.Write("<script>alert('上传成功!');</script>");
                Response.Write("文件路径:"+this.fulFile.PostedFile.FileName+"  "
                    +this.fulFile.PostedFile.ContentLength+"字节  MIME内容类型:"
                    +this.fulFile.PostedFile.ContentType);
            }
            else
            {
                Response.Write("<script>alert('上传失败!仅支持JPG格式的图片');</script>");
            }
        }
        else
        {
            Response.Write("<script>alert('请选择文件!');</script>");
        }
    }

 

 

 

 


 protected void Button2_Click(object sender, EventArgs e)
    {
        if(UpLoadPic())
        {
            Response.Write(FileUpload1.PostedFile.FileName.ToString());
        }
    }

private string[] AcceptedFileTypes = new string[] { "jpg", "jpeg", "jpe" ,"png","p2p"};

    public bool UpLoadPic()//上传  
    {
        bool ifSucess = false;
        if (FileUpload1.PostedFile.ContentLength > 0)
        {
            if (IsValidFileType(FileUpload1.PostedFile.FileName))
            {

                if (FileUpload1.PostedFile.ContentLength < 1024 * 2000)
                {

                    string fullName = FileUpload1.PostedFile.FileName;
                    string newName = System.DateTime.Now.ToString("yyyyMMddhhmmss") + fullName.Substring(fullName.LastIndexOf("."));
                    string path = Server.MapPath("UpLoad");
                    FileUpload1.SaveAs(path + "/" + newName);
                    Label1.Text = newName;
                    Image1.ImageUrl = "UpLoad/" + newName;
                    Image1.Visible = true;
                    ifSucess = true;
                }
                else
                {
                    Response.Write("<script>alert('出错了!上传文件太大!')</script>");
                }
            }
            else
            {
                ifSucess = false;
                Response.Write("<script>alert('出错了!上传文件格式不对!')</script>");
            }
        }
        else
        {
            Response.Write("<script>alert('出错了!上传文件不能为空!')</script>");
        }
        return ifSucess;
    }
    private bool IsValidFileType(string FileName)//图片格式检验  
    {
        string ext = FileName.Substring(FileName.LastIndexOf(".") + 1, FileName.Length - FileName.LastIndexOf(".") - 1);
        for (int i = 0; i < AcceptedFileTypes.Length; i++)
        {
            if (ext.ToLower() == AcceptedFileTypes[i])
            {
                return true;
            }
        }
        return false;
    }