1. 程式人生 > >asp.net上傳圖片並能實現實時預覽

asp.net上傳圖片並能實現實時預覽

前臺aspx:
<script type="text/javascript">
        //下面用於圖片上傳預覽功能
        function setImagePreview(avalue) {
            document.getElementById("tbFile").value = document.getElementById("file").value;
            var docObj = document.getElementById("file");
            var imgObjPreview = document.getElementById("preview");
            if (docObj.files && docObj.files[0]) {
                //火狐下,直接設img屬性
                imgObjPreview.style.display = 'block';
                //imgObjPreview.style.width = '150px';
                //imgObjPreview.style.height = '180px';
                //imgObjPreview.src = docObj.files[0].getAsDataURL();


                //火狐7以上版本不能用上面的getAsDataURL()方式獲取,需要以下方式
                imgObjPreview.src = getObjectURL(docObj.files[0]);
            }
            var docObj2 = document.getElementById("file2");//第二個上傳
            document.getElementById("tbFileF").value = document.getElementById("file2").value;
            var imgObjPreview2 = document.getElementById("preview2");
            if (docObj2.files && docObj2.files[0]) {
                //火狐下,直接設img屬性
                imgObjPreview2.style.display = 'block';
                //火狐7以上版本不能用上面的getAsDataURL()方式獲取,需要一下方式
                imgObjPreview2.src = getObjectURL(docObj2.files[0]);
            }
            var docObj3 = document.getElementById("file3");//第三個上傳同理
            document.getElementById("tbFileQ").value = document.getElementById("file3").value;
            var imgObjPreview3 = document.getElementById("preview3");
            if (docObj3.files && docObj3.files[0]) {
                //火狐下,直接設img屬性
                imgObjPreview3.style.display = 'block';
                //火狐7以上版本不能用上面的getAsDataURL()方式獲取,需要一下方式
                imgObjPreview3.src = getObjectURL(docObj3.files[0]);
            }




        }
        function getObjectURL(file) {
            var url = null;
            if (window.createObjectURL != undefined) {
                url = window.createObjectURL(file)
            } else if (window.URL != undefined) {
                url = window.URL.createObjectURL(file)
            } else if (window.webkitURL != undefined) {
                url = window.webkitURL.createObjectURL(file)
            }
            return url
        };


</script>




<body scroll="no">
    <form id="form1" runat="server" enctype="multipart/form-data">/非常重要
        ....
.... 
<tr>
                <td width="7%" align="right">
                    圖片1:
                </td>
                <td width="93%">
                    <%--<span class="zt">&nbsp;<asp:FileUpload ID="picFileUpload" runat="server" 
                        Width="295px" />
                    (圖片格式建議為JPG\GIF\PNG\PDF,大小建議不超過1M)</span>--%>
                        <input id="tbFile" type="text" style="width:200px;"/>
                        <input name="file" type="file" id="file" onchange="setImagePreview();"  style="width: 103px; height: 41px; display: none" />&nbsp;
                        <input name="image1" type="button" id="image1" runat="server" class="button margin-left" onclick="file.click();" value="+ 選擇圖片" />
                </td>
            </tr>
<tr>
                <td width="7%" align="right">
                   預覽:
                </td>
                <td>
       <div id="localImag"><img id="preview" width="150" style="display: block;"/>
                </div>
                </td>
          </tr>
<tr>
                <td width="7%" align="right">
                    圖片2:
                </td>
                <td width="93%">
                    <%--<span class="zt">&nbsp;<asp:FileUpload ID="picFileUpload" runat="server" 
                        Width="295px" />
                    (圖片格式建議為JPG\GIF\PNG\PDF,大小建議不超過1M)</span>--%>
                        <input id="tbFileF" type="text" style="width:200px;"/>
                        <input name="file" type="file" id="file2" onchange="setImagePreview();"  style="width: 103px; height: 41px; display: none" />&nbsp;
                        <input name="image1" type="button" id="image1" runat="server" class="button margin-left" onclick="file2.click();" value="+ 選擇圖片" />
                </td>
            </tr>
<tr>
                <td width="7%" align="right">
                   預覽:
                </td>
                <td>
       <div id="localImag"><img id="preview2" width="150" style="display: block;"/>
                </div>
                </td>
          </tr>


....
....
<body>


後臺:
...
{
 HttpPostedFile file = Request.Files["file"];
 HttpPostedFile file = Request.Files["file2"];
 string pictrueName = imageupload(file);
}
...
 public string imageupload(HttpPostedFile file1)
    {
        Boolean fileOk = false;
        string path = HttpContext.Current.Server.MapPath("~/uppic/");//存貯路徑
        string resultpath = "";
        if (file1!=null)
        {
            string fileExtension = System.IO.Path.GetExtension(file1.FileName).ToLower();
            string[] allowExtension = { ".jpg", ".gif", ".png", ".pdf" };
            for (int i = 0; i < allowExtension.Length; i++)
            {
                if (fileExtension == allowExtension[i])
                {
                    fileOk = true;
                    break;
                }
            }
            if (!fileOk)
            {
                Response.Write("<script>alert('上傳的檔案型別不對!');history.back(-1);</script>");
                Response.End();
            }
            if (file1.ContentLength > 1024000)
            {
                fileOk = false;
            }
            if (fileOk)
            {
                try
                {
                    resultpath = DateTime.Now.ToString("yyyyMMddHHmmssffff") + fileExtension;
                    file1.SaveAs(path + resultpath);
                }
                catch
                {
                    Response.Write("<script>alert('圖片上傳失敗!');history.back(-1);</script>");
                    Response.End();
                }
            }
            else
            {
                Response.Write("<script>alert('檔案型別或者檔案大小超出1M或者檔案型別不對!');history.back(-1);</script>");
                Response.End();
            }
            return resultpath;
        }
        else
        {
            return "";
        }


    }




context.Request.Files為NULL常見問題
在實現圖片上傳功能的時候出現在ashx等處理頁面出現context.Request.Files為NULL異常,有幾點需要注意:


1、在客戶端可以將form用submit提交,如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="JS/jquery-1.3.2.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        function UpLoad() {
            $("#form1").submit();            
        } 
        
    </script>


</head>
<body>
    <form id="form1" method="post" enctype="multipart/form-data" action="ImageHandler.ashx">
    <div>
        <input id="File1" type="file" runat="server"/>
        <input id="Button1" type="button" value="上傳" onclick="UpLoad()" /></div> 
        <div id="imgList"></div>      
    </form>
</body>
</html>


2、form表單需要加上屬性method="post" enctype="multipart/form-data"


3、檔案控制元件需要加上runat="server"屬性