有關圖片上傳的相關知識input type=file,HTML5的 input:file上傳類型控制


遇到項目,要求做一個影像系統,對於前端開發需要了解file的相關屬性,以及如何開發。工欲善其事,必先利器嘛。度娘一陣子搜索,找資料。這年頭,需要的是你解決問題的能力啊!

參考應用:https://www.cnblogs.com/sunliyuan/p/5737928.html

http://blog.okbase.net/jquery2000/archive/1296.html(解釋的也很清楚)

http://blog.csdn.net/qingyjl/article/details/52003567

 文件(File) 接口提供有關文件的信息,並允許網頁中的 JavaScript 訪問其內容。

 File 接口基於Blob,繼承了 blob的功能並將其擴展使其支持用戶系統上的文件。Blob對象表示不可變的類似文件對象的原始數據。Blob表示不一定是JavaScript原生形式的數據。

有關於file的官方文檔,可以參看一個較為專業的官網:https://developer.mozilla.org/zh-CN/docs/Web/API/File  這個里面講述的非常詳細,有時間多看看。

這里可以了解到file接口的屬性。

File.name;返回當前 File 對象所引用文件的名字。

File.size;返回文件的大小。

File.lastModified;返回當前 File 對象所引用文件最后修改時間, 自 1970年1月1日0:00 以來的毫秒數。

File.webkitRelativePath 返回 File 相關的 path 或 URL。

是時候來個例子,

// fileInput is a HTMLInputElement: <input type="file" multiple id="myfileinput">
var fileInput = document.getElementById("myfileinput");

// files is a FileList object (simliar to NodeList)
var files = fileInput.files;

for (var i = 0; i < files.length; i++) {
  var type = files[i].type;
  var name = files[i].name;
  alert("Filename: " + name + " , Type: " + type);

}

 files 是一個 FileList 對象(類似於NodeList對象)。input里type=file里都有這個files屬性,意為獲取文件集合。

再上個完整例子:

<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
// multiple屬性可以讓用戶能選擇多個文件

<input id="myfiles" multiple type="file">

</body>

<script>

var pullfiles=function(){ 
    // 獲取到input元素
    var fileInput = document.querySelector("#myfiles");
    var files = fileInput.files;
    // 獲取到所選文件數量 
    var fl=files.length;
    var i=0;

    while ( i < fl) {
        var file = files[i];
        alert(file.name);
        i++;
    }    
}

// 設置change事件處理函數
document.querySelector("#myfiles").onchange=pullfiles;

</script>

</html>

好了,到這里我們來講一下上傳圖片,將圖片顯示出來放到頁面的方法。HTML5讀取input[type=file]中的圖片

參考資料:《HTML5學習之FileReader接口》——http://blog.csdn.net/zk437092645/article/details/8745647

來個demo

<form id="imgForm">  
    <input type="file" class="addBorder">  
    <br/>  
    <button type="button" onclick="loadImg()">獲取圖片</button>  
</form>  
  
<div class="addBorder" id="imgDiv">  
    <img id="imgContent">  
</div>  
function loadImg(){  
    //獲取文件  
    var file = $("#imgForm").find("input")[0].files[0];  
  
    //創建讀取文件的對象  
    var reader = new FileReader();  
  
    //創建文件讀取相關的變量  
    var imgFile;  
  
    //為文件讀取成功設置事件  
    reader.onload=function(e) {  
        alert('文件讀取完成');  
        imgFile = e.target.result; //獲取當前文件的內容
        console.log(imgFile);  
        $("#imgContent").attr('src', imgFile);  
    };  
  
    //正式讀取文件  
    reader.readAsDataURL(file);  
}  
這里要注意 reader.onload是最后執行的,在正式讀取文件之后。
我們創建了一個FileReader對象,命名為reader。還聲明了一個imgFile變量,這個變量主要用於存儲讀取文件之后所生成的對應文件的base64碼。
    之后這段reader.onload=function(e){}是為讀取文件綁定一個onload事件,類似於我們給HTML標簽綁定onclick事件,當特定條件達到時,就調用該方法。
    最后的,也是最重要的,就是開始讀取文件了。用reader.readAsDataURL(file),根據大家編程經驗也都能看出,就是調用FileReader類中的readAsDataURL方法,並把之前獲取的file對象傳進去。如果讀取成功,則調用reader.onload事件。
    這里,我還把讀取結果輸入到了控制台中,如下圖控制台輸出的base64碼(部分)為:
    光是一個圖片就有這么多數據,具體我沒研究過,不過我知道的就是圖片越大,數據量也就越大。但是所有圖片前一段都是類似的。如上圖紅色標注部分,都是“data:image/jpeg;base64,”,之后就是圖片的正文內容。這個正文內容有什么用呢?我們可以把這些數據用base64編碼格式寫入對應圖片格式的文件中,你會發現,圖像出來了。一半我上傳圖片的方法就是獲取圖片的base64碼,然后傳給服務器,服務器再對應地生成一個后綴名一樣的文件,並用base64編碼寫入這些數據,服務器端就已經生成了相同的圖片,然后把圖片地址保存到數據庫中。(雖然說可以直接把這些數據存入數據庫中,不過你可以想象一下,數據庫中一個字段存這么多數據會是多么壯觀的事情)。
另外:
reader.readAsDataURL(file);//轉化為base64格式。
還有的是轉化為blob對象的,可以參看網站 https://www.cnblogs.com/saysmy/p/5626337.html
<input type="file" name="2" class="file" accept="image/*"  capture="camera" id="file39"  />
var file = document.getElementById(idFile);
var fileList = file.files; //獲取的圖片文件
var imgUrl = window.URL.createObjectURL(fileList[i]);

可以參考網站:http://blog.csdn.net/fd214333890/article/details/71250488


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM