jQuery圖片上傳前先在本地預覽(不經過後端處理)

来源:http://www.cnblogs.com/tongkaiqiang/archive/2017/04/28/6780822.html
-Advertisement-
Play Games

前段時間遇到一個問題,前端想實現圖片上傳預覽(不經過後端PHP或JAVA處理),用戶點擊file按鈕上傳文件,點擊確定馬上就能看到預覽的效果,但在實現的時候無論怎樣都取不到file上圖片的真實路徑,得到的反而是C:\fakepath\a.jpg,這個路徑是錯誤的。百度之後得到說瀏覽器基於保護用戶的相 ...


前段時間遇到一個問題,前端想實現圖片上傳預覽(不經過後端PHP或JAVA處理),用戶點擊file按鈕上傳文件,點擊確定馬上就能看到預覽的效果,但在實現的時候無論怎樣都取不到file上圖片的真實路徑,得到的反而是C:\fakepath\a.jpg,這個路徑是錯誤的。百度之後得到說瀏覽器基於保護用戶的相關安全措施,隱藏了上傳的真實路徑,用fakepath代替,當然,調整瀏覽器的相關安全設置可以解決這個問題。但我們不可能讓所有用戶都通過設置瀏覽器的安全設置來進行圖片上傳,這種方法在網路交互上顯然不現實。

/* *名稱:圖片上傳本地預覽插件 v1.1 *介紹:基於JQUERY擴展,圖片上傳預覽插件 目前相容瀏覽器(IE 谷歌 火狐) 不支持safari *插件網站:http://keleyi.com/keleyi/phtml/image/16.htm *參數說明:   Img:圖片ID;   Width:預覽寬度;   Height:預覽高度;   ImgType:支持文件類型;   Callback:選擇文件顯示圖片後回調方法; *使用方法:
<div>
<img id="ImgPr" width="120" height="120" /></div>
<input type="file" id="up" />

把需要進行預覽的IMG標簽外 套一個DIV 然後給上傳控制項ID給予uploadPreview事件

$("#up").uploadPreview({ Img: "ImgPr", Width: 120, Height: 120, ImgType: ["gif", "jpeg", "jpg", "bmp", "png"], Callback: function () { }});

實例:

jQuery.fn.extend({
    uploadPreview: function (opts) {
        var _self = this,
            _this = $(this);
        opts = jQuery.extend({
            Img: "ImgPr",
            Width: 100,
            Height: 100,
            ImgType: ["gif", "jpeg", "jpg", "bmp", "png"],
            Callback: function () {}
        }, opts || {});
        _self.getObjectURL = function (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
        };
        _this.change(function () {
            if (this.value) {
                if (!RegExp("\.(" + opts.ImgType.join("|") + ")$", "i").test(this.value.toLowerCase())) {
                    alert("選擇文件錯誤,圖片類型必須是" + opts.ImgType.join(",") + "中的一種");
                    this.value = "";
                    return false
                }
//高版本Jquey使用  if ($.support.leadingWhitespace)
                if ($.browser.msie) { //低版本jquery中使用的方式
                    try {
                        $("#" + opts.Img).attr('src', _self.getObjectURL(this.files[0]))
                    } catch (e) {
                        var src = "";
                        var obj = $("#" + opts.Img);
                        var div = obj.parent("div")[0];
                        _self.select();
                        if (top != self) {
                            window.parent.document.body.focus()
                        } else {
                            _self.blur()
                        }
                        src = document.selection.createRange().text;
                        document.selection.empty();
                        obj.hide();
                        obj.parent("div").css({
                            'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)',
                            'width': opts.Width + 'px',
                            'height': opts.Height + 'px'
                        });
                        div.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src
                    }
                } else {
                    $("#" + opts.Img).attr('src', _self.getObjectURL(this.files[0]))
                }
                opts.Callback()
            }
        })
    }
});

調用:

$(function () {
    $("#up").uploadPreview({ Img: "ImgPr", Width: 120, Height: 120 });
});

HTML結構:

<div>
<img id="ImgPr" width="120" height="120" />
</div>
<input type="file" id="up" />

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 收錄待用,修改轉載已取得 "騰訊雲" 授權 作者 | 殷源 編輯 | 迷鹿 殷源,專註移動客戶端開發,微軟Imagine Cup中國區特等獎獲得者,現就職於騰訊。 接 "JavaScriptCore全面解析 (上篇)" 六、 JSExport JSExport協議提供了一種聲明式的方法去向 "Jav ...
  • 1、什麼是HTML語義化? “語義化”指的是在需要更少的人類干預的情況下,能夠研究和手機信息,讓網頁能夠被機器理解,最終讓人類受益。 語義化的目的就是讓大家直觀的認識標簽(markup)和屬性(attribute)的用途和作用。很明顯Hx系列看起來很像標題,因為擁有粗體和較大的字型大小。<strong> ...
  • 收錄待用,修改轉載已取得 "騰訊雲" 授權 作者 | 殷源 編輯 | 迷鹿 殷源,專註移動客戶端開發,微軟Imagine Cup中國區特等獎獲得者,現就職於騰訊。 JavaScript越來越多地出現在我們客戶端開發的視野中,從ReactNative到JSpatch,JavaScript與客戶端相結合 ...
  • Bootstrap是HTML、CSS 和 JS 框架,用於開發響應式佈局、移動設備優先的 WEB 項目。 可以自動適配任何設備,解決了響應式實現的繁瑣問題,可以修改其中的各種樣式,同樣,其內部功能的強大包含了整個HTML,CSS,JS的各個方面。 通過Bootstrap製作的網站,極大地節省了代碼, ...
  • 函數是JavaScript 中最有趣的部分之一。它們本質上是十分簡單和過程化的,但也可以是非常複雜和動態的。一些額外的功能可以通過使用閉包來實現。此外,由於所有的函數都是對象,所以使用函數指針非常簡單。這些令JavaScript 函數不僅有趣而且強大。以下幾節描繪了幾種在JavaScript 中使用 ...
  • 看了下,距離上次發帖都是去年10月份的事,忙於工作的我很少跑博客園裡面來玩了。 做這個小網站的初衷是 https://tinypng.com/ 這個網站有時候訪問很慢,然後自己去研究了下圖片壓縮。 網上有看到 https://tinypng.com/ 中使用的 pngquant , 我去下載了png ...
  • NodeJs版本:4.4.4 fs 文件系統模塊是一個封裝了標準的 POSIX 文件 I/O 操作的集合。Node.js 文件系統(fs 模塊)模塊中的方法均有非同步和同步版本。 圖片的複製與粘貼 創建一個可讀流與一個寫入流。通過管道 。 讀文件(fs.readFile) 定義:fs.readFile ...
  • 任務四:定位和居中問題 任務目標 實踐HTML/CSS佈局方式 深入瞭解position等CSS屬性 任務描述 實現如 示例圖(點擊打開) 的效果 灰色元素水平垂直居中,有兩個四分之一圓位於其左上角和右下角。 任務註意事項 思考不同情況下(如灰色高度是根據內容動態變化的)水平垂直居中的解決方案。 動 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...