標籤:上傳 img relative .post accept oar image art details
這次做了vue頁面的圖片上傳功能,不帶裁剪功能的!
首先是html代碼,在input框上添加change事件,如下:
- <ul class="clearfix">
- <li v-if="imgs.length>0" v-for=‘(item ,index ) in imgs‘>
- <img :src="item">
- </li>
- <li style="position:relative" v-if="imgs.length>=6 ? false : true">
- <img src="../../assets/img/addimg.png"><input class="upload" @change=‘add_img‘ type="file">
- </li>
- </ul>
我這裡做了圖片數量的限制,最多6張。
然後是data資料,如下:
- data () {
- return {
- imgs: [],
- imgData: {
- accept: ‘image/gif, image/jpeg, image/png, image/jpg‘,
- }
- }
- }
imgs數組是放圖片路徑的,頁面顯示圖片就是迴圈這個數組,imgData是判斷圖片類型的。
接下來是最重要的methods裡面的方法,具體如下:
[html] view plain copy
- <code class="language-html">add_img(event){
- let reader =new FileReader();
- let img1=event.target.files[0];
- let type=img1.type;//檔案的類型,判斷是否是圖片
- let size=img1.size;//檔案的大小,判斷圖片的大小
- if(this.imgData.accept.indexOf(type) == -1){
- alert(‘請選擇我們支援的圖片格式!‘);
- return false;
- }
- if(size>3145728){
- alert(‘請選擇3M以內的圖片!‘);
- return false;
- }
- var uri = ‘‘
- let form = new FormData();
- form.append(‘file‘,img1,img1.name);
- this.$http.post(‘/file/upload‘,form,{
- headers:{‘Content-Type‘:‘multipart/form-data‘}
- }).then(response => {
- console.log(response.data)
- uri = response.data.url
- reader.readAsDataURL(img1);
- var that=this;
- reader.onloadend=function(){
- that.imgs.push(uri);
- }
- }).catch(error => {
- alert(‘上傳圖片出錯!‘);
- })
- },</code>
首先是擷取你選擇的圖片,判斷圖片的類型和大小,然後以form表單的形式提交到後台,後台會返回給你這個圖片的線上路徑,你把後台返回的圖片路徑push到圖片數組裡面就可以了。
一般情況下還有刪除圖片的方法,就是把圖片數組裡的那個路徑刪除掉,把資料提交到後台,告訴後台刪除了哪張圖片就可以了。
vue 圖片上傳功能