因爲瀏覽器的安全限制,<input type="file">經過js的onchange事件獲取上傳文件的路徑時,返回的是C:fakepath文件名,隱藏了真實的物理路徑,可使用window.URL.createObjectURL()返回一個Blob對象,Blob對象就是二進制數據,它是一個包含有隻讀原始數據的類文件對象
組件upload:瀏覽器
當點擊按鈕時觸發SendDocument方法安全
this.$refs.upload.submit();會觸發beforeUpload方法
打印結果以下:框架
就能夠把blob對象傳給extrinsicFileName(表單裏的一個字段)
這樣能夠把表單的數據提交給後臺了學習
那麼重點是,你爲何要獲取上傳文件的路徑?this
我是一個初學者,剛剛開始學習作上傳文件這個功能,簡單覺得要把文件路徑返回給後臺,經過他們去獲取上傳文件的數據。spa
那麼上傳文件功能其實是不須要獲取文件路徑的,而是經過二進制流傳過去的,上面的blob對象其實就是表示文件的二進制數據,經過文件流的方式傳輸,在計算機裏全部的對象都是經過二進制流傳輸的。Blob對象是File類型的父類型,就是Flie對象經過slice()讀取整個文件的部分數據。File包含name、size、type等屬性,Blob有size、type屬性。因此上傳文件是直接把客戶端的文件數據發送到服務端,不是文件路徑,而是整個文件的數據,客戶端下載服務端的就能夠經過服務端的路徑找到服務端的文件,服務端是沒有辦法經過路徑訪問客戶端文件的。
除非是,服務端返回一個路徑,好比「c:/aa.txt」,而後客戶端收到這個路徑,經過代碼找到這個文件,以後再把這個aa.txt整個文件數據發送給服務端,其實說到底仍是客戶端把整個文件數據發送給服務端。對象
基礎沒打牢就開始學習框架,我開始懷疑本身是否是走錯路線了,不過學習老是一個按部就班的過程,不多是直線式的,想和你們多交流,因此之後還請你們多多指教。事件