1. 程式人生 > >微信js-sdk 上傳圖片、下載圖片介面

微信js-sdk 上傳圖片、下載圖片介面

前提已經在wx.config()中,將圖片介面驗證通過。

微信js-sdk 中上傳圖片介面(uploadImage)和下載圖片介面(downloadImage)都是針對微信伺服器本身的。以官方文件為準

注:

1.使用chooseImage介面獲取到微信客戶端圖片地址的與都是 weixin://xxxx

3.目前多媒體檔案下載介面的頻率限制為10000次/天,如需要調高頻率,請郵件[email protected],郵件主題為【申請多媒體介面呼叫量】,請對你的專案進行簡單描述,附上產品體驗連結,並對使用者量和使用量進行說明。

例項1、選擇單個圖片並上傳到微信伺服器

//選擇圖片單個圖片
wx.chooseImage({
    count: 1, // 預設9
    sizeType: ['original'], 
    sourceType: ['album', 'camera'], 
    success: function (res) {
        var localId= res.localIds[0]; 
        $('#localId').text(localId);
        //選擇圖片成功,上傳到微信伺服器
        wx.uploadImage({
            localId: localId, // 需要上傳的圖片的本地ID,由chooseImage介面獲得
            isShowProgressTips: 1, // 預設為1,顯示進度提示
            success: function (res) {
                var serverId = res.serverId; // 返回圖片的伺服器端ID
                $('#serverId').text(serverId);
            }
        });
    }
});
例項2、下載,剛上傳的圖片,指定serverID
var serverId=$('#serverId').text();
wx.downloadImage({
    serverId: serverId, // 需要下載的圖片的伺服器端ID,由uploadImage介面獲得
    isShowProgressTips: 1, // 預設為1,顯示進度提示
    success: function (res) {
        var localId = res.localId; // 返回圖片下載後的本地ID
        $('#imgTarget').attr('src',localId);
    }
});
從微信客戶端獲取使用者檔案,方法2

可以使用html的File檔案域,讀取客戶端檔案,然後上傳到伺服器

<div class="container">
    <!--圖片型別驗證方法1-->
    <input type="file" id="file" multiple accept="image/*" />
    <input type="button" id="btn1" value="選擇上傳檔案" onclick="showFiles();" />
    <h4>選擇檔案如下:</h4>
    <img src="" id="img1" />
</div>

Js程式碼:
//讀取圖片,並上傳到伺服器例項
var fileBox = document.getElementById('file');
function showFiles() {
    //獲取選擇檔案的陣列
    var fileList = fileBox.files;
    for (var i = 0; i < fileList.length; i++) {
        var file = fileList[i];
        //圖片型別驗證第二種方式
        if (/image\/\w+/.test(file.type))
            readFile(file);
        else
            console.log(file.name + ':不是圖片');
    }
}
//讀取圖片內容 為DataURL
function readFile(file) {
    var reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = function (e) {
        var result = reader.result;
        $('#img1').attr('src', result)
        upload(result);
    }
    //上傳到自己的伺服器
    function upload(dataUrl){
        var  data=dataUrl.split(',')[1];
        //資料結果是轉換,轉換成二進位制資料
        data=window.atob(data);
        var uint=new Uint8Array(data.length)
        for (var i = 0; i < data.length; i++) {
            uint[i]=data.charCodeAt(i);
        }
        var blob=new Blob([uint],{type:'image/jpeg'});
        //上傳到伺服器
        var fd=new FormData();
        fd.append('file',blob);
        fd.append('isclip', '-1');
        fd.append('maxsize', 1024*1024*10);
        fd.append('minsize', 0);
        fd.append('subfolder', '1');
        fd.append('automove',true);
        fd.append('extention', '.jpg');
        alert('開始上傳');
        var xhr = new XMLHttpRequest();
        xhr.open('post', '/common/upload', true);
        //監聽事件
        xhr.onreadystatechange = function (e) {
            if (xhr.readyState == 4 && xhr.status == 200) {
                var data = eval('(' + xhr.responseText + ')');
                if (data.success == true) {
                    alert('上傳成功:');
                    alert(data.msg);
                } else {
                    alert(data.msg);
                }
            } else {
                //alert(xhr.readyState);
            }
        }
        xhr.send(fd);
    }
}

讀取客戶端圖片,方法3,目前無效,程式碼僅供參考
    wx.chooseImage({
        count: 1, // 預設9
        sizeType: ['original'], 
        sourceType: ['album', 'camera'], 
        success: function (res) {
            var localId= res.localIds[0]; 
            //獲取圖片物件
            try {
                var img=new Image();
                //此設定在微信瀏覽器中無效,也不會丟擲異常,後面的程式碼不會執行
                img.setAttribute('crossOrigin', 'anonymous');
                img.onload=function(){
                    var canvas=document.getElementById('canvasOne');
                    var ctx=canvas.getContext('2d');
                    canvas.width=img.width;
                    canvas.height=img.height;
                    ctx.clearRect(0,0,canvas.width,canvas.height);
                    ctx.drawImage(img,0,0,img.width,img.height);
                    try {
                        upload(canvas);
                    } catch (e) {
                        alert(e.name);
                        alert(e.message);
                    }
                }
                img.src=localId;
            } catch (e) {
                alert(e.name);
                alert(e.message);
            }
        }
    });
    //上傳到自己的伺服器
    function upload(canvas){
        //由於toDataURL()的瀏覽器安全問題,如果不是同一個域的圖片會丟擲異常
        //所以此處
        var data=canvas.toDataURL('image/jpeg');
        data=data.split(',')[1];
        alert(data.length);
    }