webuploader插件,我踩得坑


我在目前的公司做的項目要么是原生寫法去做項目,要么就是vue+webpack做項目,但是vue這部分只是用了模板template,vue其他的都沒用。

有一個項目需要做上傳圖片的功能,老大扔給我一個插件-webuploader。

然后上次做的現在需要改進重做一遍,所以我重新搞了一遍,順便把踩得坑分享下來。

1.webuploader和其他插件使用一樣,有個webuploader.css,webuploader.js,另外再加上一個文件Uploader.swf。所以再使用過程中要把插件的css和js引用一下。Uploader.swf用處在初始化中體現。

注意:我是在vue+webpack的環境下開發項目的,webuploader.css我是在js文件,通過require去引入。但是webuploader.js這個不能通過require去引用,否則會報錯,所以webuploader.js我是在index.html中放在body的script標簽中引入的,這樣就不報錯了。

2.uploader初始化。

初始化包含的信息蠻多,Uploader.swf的用處也在初始化中體現,初始化如下。

var uploader = WebUploader.create({
    auto: true, // 選完文件后,是否自動上傳 
    swf: 'js/Uploader.swf', // swf文件路徑 
    server: 'upload.php', // 文件接收服務端 
    pick: '.choose_all', // 選擇文件的按鈕。可選
    // 只允許選擇圖片文件。 
    accept: {
       title: 'Images',
       extensions: 'jpg,jpeg,png',
       mimeTypes: 'image/jpg,image/jpeg,image/png'
    },
    thumb: {
       type: 'image/jpg,jpeg,png'
    },
    fileNumLimit: 8, //限制上傳個數
    fileSingleSizeLimit: 2048000 //限制單個上傳圖片的大小
});

注:

a.關於選擇圖片文件,accept中的mimeTypes最好寫明你規定的可以上傳的文件類型

mimeTypes: 'image/jpg,image/jpeg,image/png'

如果這部分你是這樣寫的:

mimeTypes: 'image/*'

那么很不幸的告訴你,你再點擊上傳圖片的時候,頁面半天不會有反應,然后過了好長時間才會蹦出彈窗。

b.限制上傳單張圖片文件大小,單位是B,1M=1024000B。

3.上面我也有說,我用的vue的template模板去寫的,然后我有一個popup.vue的文件里面寫的是彈窗的template,我本來想把彈窗的css直接寫在template的下面,所以我也把我想的這么干了,如下:

<template>
<!--彈窗內容-->
</template>
<style scoped>
.webuploader-pick{width:100%;}

/*.....其他css樣式*/

</style>

然后后面需要修改webuploader帶來的css的時候,沒反應了,對,沒反應,寫的修改樣式完全體現不出來,我找了好久怎么解決,結果!!!!我把template模板需要用到的css全部放在一個外部的css中,就像這樣

<template>
<!--彈窗內容-->
</template>
<style scoped>
    /*引入css*/
    @import url("../css/popup.css");
</style>

然后就好了,真是無語了。好在解決了。

4.修改上傳圖片縮略圖的大小,用js去控制,如下:

var uploadimgWidth = $('#uploadimg').width();
console.log(uploadimgWidth);
var thumbnailWidth = 0.235 * uploadimgWidth;
var thumbnailHeight = thumbnailWidth;

具體要改成多大的縮略圖,大家依據自己的需求去變,可以是百分比,也可以是px,也可以是其他尺寸單位。

5.圖片如果上傳失敗,需要刪除上傳失敗的文件,代碼如下:

uploader.removeFile(uploader.getFile(file.id));
uploader.onFileDequeued = function( file ) {
     console.log(uploader.getFiles());
};

注:在操作的時候你會發現這個東西還存在,其實只不過是記錄存在而已,已經刪除了。不信你試試,可以上傳刪除后的文件。

6.圖片不能作為上傳按鈕,不管是背景圖片還是img寫的圖片,都不可以,大家可以試一下,我已經驗證了N次。如果你把圖片作為上傳按鈕,那么就會出現點擊失效的問題,原因如下:

上傳部分就會變成一個width和height只有1px的小點點,然后你根本不知道它在哪兒。

如果不得不把圖片作為上傳按鈕,建議在圖片外面再套一層標簽,div也好,p也罷,都可以。

這個坑我都覺得不可理喻了,下面的坑更加不可理喻。

7.作為上傳按鈕的標簽,如果這個標簽上有display:none這個樣式存在,辣么也會出現和圖片作為上傳按鈕一樣的問題。

上傳部分又會變成一個width和height只有1px的小點兒。那么這個問題怎么解決了,也是困惑了我好久啊,在網上搜解決辦法,功夫不負有心人啊,終於找到解決辦法了:

uploader.refresh();

加上這么一句話,這個問題就解決了。

8.還有一個東西我今天分享一下。

我這邊把圖片數據上傳到后台,然后后台會返回我數據,那么這個數據在哪個地方獲取呢?如下:

uploader.on('uploadSuccess', function (file, response) {
     console.log(response._raw); //這里可以得到后台返回的數據
     $('#' + file.id).addClass('upload-state-done');
     imgArr.push(response._raw);
});

response是個對象,如果服務器返回的是json格式,那么正和我們的意。如果不是json格式,response._raw里面可以拿到原始數據。所以,webuploader對於后端返回的數據格式是沒有要求的。

 


免責聲明!

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



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