JS 獲取input標簽 type="file"的物理路徑,解決瀏覽器C:\fakepath\的問題


通過點擊上傳圖片后,onchange事件獲取上傳圖片途徑

很無奈,獲取的是C:\fakepath\aa.jpg這種假路徑

百度查閱了一下:

這是由於瀏覽器的安全機制,input file的路徑時被fakepath代替,隱藏了真實物理路徑。 

解決方法:

 

1、調整瀏覽器的瀏覽器安全設置(不推薦,也不合理)。

2、使用window.URL.createObjectURL()

				var url = null;  
				var fileObj = document.getElementById("uplaodImg").files[0];
				if (window.createObjcectURL != undefined) {  
				    url = window.createOjcectURL(fileObj);  
				} else if (window.URL != undefined) {  
				    url = window.URL.createObjectURL(fileObj);  
				} else if (window.webkitURL != undefined) {  
				    url = window.webkitURL.createObjectURL(fileObj); 
				}
				// console.log(url)
				if(url){
					$('#user_avatar').attr('src',url)

				}

  

解釋:

URL.createObjectURL()方法會根據傳入的參數創建一個指向該參數對象的URL,這個URL的生命僅存在於它被創建的這個文檔里,
新的對象URL指向執行的File對象或Blob對象。 
語法:objcetURL = window.URL.createObjectURL(file || blob); 
參數:File對象和Blob對象;File對象就是一個文件,比如我用file type=”file”標簽來上傳文件,那么里面的每個文件都是
一個file對象。Blob對象就是二進制數據,比如在XMLHttpRequest里,如果指定requestType為blob,那么得到的返回值也是
一個blob對象。 
每次調用createObjectURL的時候,一個新的URL對象就被創建了。即使你已經為同一個文件創建過一個URL.,如果你不再需要這
個對象,要釋放它,需要使用URL.revokeObjectURL()方法.。當頁面被關閉,瀏覽器會自動釋放它,但是為了最佳性能和內存使用,
當確保不再用得到它的時候,就應該釋放它。

  

 


免責聲明!

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



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