磨刀不誤砍柴工

          合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。

             ::  ::  ::  :: 管理

          在項目中,有上傳本地圖片先預覽的功能。原先在本機IE6,IE7瀏覽器中可正常預覽的功能,但在將項目布暑到遠程服務器的時候,在IE7中不能預覽了。此問題,在之前同事的IE7訪問我機子預覽時也出現過,當時沒在意,認為系統不會有問題。

          今天,上網找了許久,終于知道了,這原來是IE7中加強了安全限制。通過http訪問的頁面默認是沒有訪問用戶本機圖片文件的權限的,所以通過javascript獲取不了本機的圖片路徑等相關信息。網上也有幾種解決方案,一種是通過利用style的"DXImageTransform.Microsoft.AlphaImageLoader" 濾鏡來實現,而另一種,則是設置當前站點為安全站點即可。

          由于,預覽還涉及到圖片旋轉等,利用"DXImageTransform.Microsoft.AlphaImageLoader"方式,確不知道該如何旋轉此濾鏡中的圖片,故暫時決定采用設置安全性方式,有勞用戶了。

          一些莫名其妙的錯誤都是有源頭的。

          收集的資料貼出來:

          在IE6.0中,用戶可以在javascript中或許最終用戶本地圖片的長寬:

          1. <Script language=Javascript>
          2. function getLocalImageInfo( imgUrl )
          3. {
          4. var objImg = new Image();
          5. objImg.src = imgUrl;
          6. alert( objImg.width ) //the width of the local image
          7. alert( objImg.height ) //the height of the local image
          8. }
          9. //調用如下
          10. getLocalImageInfo( "file://c:\1.jpg" );
          11. </Script>

          并且,在IE6.0中,在客戶端本地上傳圖片前可以通過Javascript/html預覽要上傳的圖片,并獲取圖片的文件大小:


          1. < html >
          2. < head >
          3. < title > Upload file </ title >
          4. </ head >
          5. < body >
          6. < input type = "file" onchange = "javascript:previewImage(this.value)" >
          7. < img id = "img" />
          8. < script language = "javascrtip" >
          9. function previewImage( imgUrl )
          10. {
          11. var objImg = document .getElementById("img");
          12. objImg.src = imgUrl ;
          13. alert( "the size of the image file:" + objImg.fileSize )
          14. }
          15. </ script >
          16. </ body >
          17. </ html >

          Note: 上面的代碼最好在img圖片加載完畢后再取圖片的大小,例如:objImg.onreadystatechange()=function{ if(objImg.readystate=="complete")............}

          當在IE7中,如果上述代碼放在客戶機本機(以html的形式放在客戶機器上,而不是放在IIS中通過http訪問)以文件方式打開時仍然能實現IE6中的功能,但如果上述代碼放在IIS中,用IE7 通過HTTP協議訪問則不能正常工作。

          經過查找資料才發現IE7在安全性方面做了提升,通過http訪問的頁面默認是沒有訪問用戶本機圖片文件的權限的,所以通過javascript獲取不了本機的圖片長寬,也不能將本機圖片地址賦值給<img>對象。如果將所訪問的站點放入"可信站點"列表中(IE7->工具->Internet選項->安全->可信站點),則可以如IE6一樣正常工作。

          如果不想通過客戶將本站點設置為"可信"站點的方式來實現上傳圖片的預覽及獲取圖片長寬信息,則可以利用style的"DXImageTransform.Microsoft.AlphaImageLoader" 濾鏡來實現:


          1. < html >
          2. < head id = "Head1" runat = "server" >
          3. < title > Untitled Page </ title >
          4. < script language = javascript >
          5. function setImagePreview( fileUrl )
          6. {
          7. var objDivFilter = document .getElementById("divFilter")
          8. if( fileUrl )
          9. {
          10. objDivFilter.style.width = "400px" ;
          11. objDivFilter.style.height = "400px" ; //這個設置初始大小是必須的
          12. objDivFilter.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod = image)" ;
          13. objDivFilter.filters.item("DXImageTransform.Microsoft.AlphaImageLoader") .src = fileUrl ;
          14. // get width and height
          15. alert( objDivFilter.offsetWidth)
          16. alert( objDivFilter.offsetHeight)
          17. }
          18. }
          19. </ script >
          20. </ head >
          21. < body >
          22. < form id = "form1" runat = "server" >
          23. < div >
          24. < asp:FileUpload ID = "txtFile" runat = "server" Width = "508px" onchange = "javascript:setImagePreview( this.value );" />
          25. < br />
          26. < div id = "divFilter" />
          27. </ div >
          28. </ form >
          29. </ body >

            但上述辦法還不能在客戶端獲取圖片文件的大小,我也沒有找到很好的解決方案。

            另外:在.net中,可以在C#后臺代碼中獲取圖片的相應信息,只不過這種方式增加了一些不必要的網絡傳輸過程,有一定的性能代價。

          30. 資料二:

          31. 本地圖片預覽代碼(支持 IE6、IE7)

            在 IE6 中,可以很方便地利用 img 的 src 屬性,實現本地圖片預覽,然而在 IE7 中,這種辦法卻行不通。需要用 AlphaImageLoader


            AlphaImageLoader

            說明:

            在對象容器邊界內,在對象的背景和內容之間顯示一張圖片。并提供對此圖片的剪切和改變尺寸的操作。如果載入的是PNG(Portable Network Graphics)格式,則0%-100%的透明度也被提供。

            語法:

            filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )

            enabled:可選項。布爾值(Boolean)。設置或檢索濾鏡是否激活。
            true:默認值。濾鏡激活。
            false:濾鏡被禁止。

            sizingMethod:可選項。字符串(String)。設置或檢索濾鏡作用的對象的圖片在對象容器邊界內的顯示方式。
            crop:剪切圖片以適應對象尺寸。
            image:默認值。增大或減小對象的尺寸邊界以適應圖片的尺寸。
            scale:縮放圖片以適應對象的尺寸邊界。

            src:必選項。字符串(String)。使用絕對或相對 url 地址指定背景圖像。假如忽略此參數,濾鏡將不會作用。


            具體操作:

            1. 為預覽區域(比如要在某個 div 中預覽)添加樣式:filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);。
            2. 為 AlphaImageLoader 設置 src 屬性。

            示例代碼:


            [Ctrl+A 全部選擇 提示:您可先修改部分代碼,再按運行]

            相關閱讀:http://www.cftea.com/products/ 很好的學習地方

          posted on 2008-09-22 14:23 liwei5891 閱讀(920) 評論(0)  編輯  收藏 所屬分類: Others
          主站蜘蛛池模板: 亳州市| 铜梁县| 万宁市| 淮南市| 嘉黎县| 扎赉特旗| 洞口县| 青铜峡市| 永新县| 绥中县| 宜兰市| 思茅市| 南陵县| 顺昌县| 静宁县| 南江县| 襄垣县| 武城县| 华坪县| 墨玉县| 营口市| 保山市| 迁西县| 巴彦淖尔市| 姚安县| 晋州市| 龙游县| 阳信县| 宝丰县| 汝州市| 鹤壁市| 石台县| 铜山县| 绥中县| 普洱| 泸定县| 岱山县| 山东| 西华县| 乡宁县| 醴陵市|