Element UI 是一個基于 Vue.js 的框架,提供了很多組件,其中包括了文件上傳組件。這個組件使用了 Vue.js 的響應式系統(tǒng)和 Axios 庫,可以輕松地實現(xiàn)圖片上傳功能。
// template // javascript
import axios from 'axios';
export default {
data() {
return {
imageUrl: ''
}
},
methods: {
handleAvatarSuccess(res, file) {
this.imageUrl = URL.createObjectURL(file.raw);
},
beforeAvatarUpload(file) {
const isJPG = file.type === 'image/jpeg';
const isLt2M = file.size / 1024 / 1024< 2;
if (!isJPG) {
this.$message.error('上傳頭像圖片只能是 JPG 圖片格式!');
return false;
}
if (!isLt2M) {
this.$message.error('上傳頭像圖片大小不能超過 2MB!');
return false;
}
return true;
}
}
}
在模板中,我們首先引用 el-upload 組件,然后我們可以使用 action 屬性來指定后端處理文件上傳的接口。接著我們設置 show-file-list 屬性為 false,表示不顯示文件列表。在 on-success 屬性中指定一個回調(diào)函數(shù),當上傳成功后會執(zhí)行該函數(shù),我們可以在該函數(shù)中獲取上傳結(jié)果以及文件信息。before-upload 屬性也可以指定一個回調(diào)函數(shù),該函數(shù)在上傳之前被調(diào)用,并且如果該函數(shù)返回 false,則組件不會上傳該文件。
圖片上傳的邏輯在 javascript 部分實現(xiàn)。我們首先通過 import 引用 axios 庫,axios 是一個基于 Promise 的 HTTP 客戶端。在組件的 data 中定義了一個 imageUrl 變量,表示上傳成功后圖片的 URL 地址。
在 methods 中,我們定義了兩個方法,分別是 handleAvatarSuccess 和 beforeAvatarUpload。handleAvatarSuccess 方法會在上傳成功后執(zhí)行,并且該方法會傳遞兩個參數(shù),第一個是上傳結(jié)果 res,第二個是上傳的文件信息 file。我們可以通過 file.raw 獲取到上傳的原始文件。在 handleAvatarSuccess 方法中,我們把文件 URL 綁定到 imageUrl 變量上,這樣就可以在模板中顯示該圖片了。
beforeAvatarUpload 方法在上傳之前被調(diào)用,該方法也會傳遞一個 file 參數(shù),我們可以使用該參數(shù)瀏覽上傳文件的信息。在該方法中,我們首先定義了兩個變量 isJPG 和 isLt2M,分別表示文件格式是否為 JPG 和文件大小是否小于 2MB。如果文件格式或大小不符合要求,則使用 this.$message.error 方法提示用戶,并且返回 false,表示不上傳該文件。
Element UI 的文件上傳組件使用了 Axios 庫發(fā)送了一個 POST 請求,該請求包含了上傳文件的二進制數(shù)據(jù),以及對應的文件名和文件類型等信息。后端服務器接收到該請求后,就可以通過解析請求體來保存上傳的文件。上傳的文件可以存在本地文件系統(tǒng)上,也可以保存到云存儲服務上,例如七牛云、阿里云等。