微信JSSDK多圖片上傳并且解決IOS系統(tǒng)上傳一直加載的問(wèn)題
微信多圖片上傳必須挨個(gè)上傳,也就是不能并行,得串行:
那么我們可以定義一個(gè)如下所示的上傳函數(shù):
var serverIds = [];
function uploadImages(localImagesIds) {
if (localImagesIds.length === 0) {
$.showPreloader('正在提交數(shù)據(jù)...');
$('form').submit();
}
wx.uploadImage({
localId: localImagesIds[0], // 需要上傳的圖片的本地ID,由chooseImage接口獲得
isShowProgressTips: 1, // 默認(rèn)為1,顯示進(jìn)度提示
success: function (res) {
serverIds.push(res.serverId); // 返回圖片的服務(wù)器端ID
localImagesIds.shift();
uploadImages(localImagesIds);
},
fail: function (res) {
$.alert('上傳失敗,請(qǐng)重新上傳!');
}
});
}
上傳函數(shù)定義了,那么當(dāng)點(diǎn)擊圖片框的時(shí)候,需要選擇圖片,定義如下:
//選擇圖片
$('#uploadImages img').on('click', function () {
var $img = $(this);
wx.chooseImage({
count: 1, // 默認(rèn)9
sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認(rèn)二者都有
sourceType: ['album', 'camera'], // 可以指定來(lái)源是相冊(cè)還是相機(jī),默認(rèn)二者都有
success: function (res) {
var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作為img標(biāo)簽的src屬性顯示圖片
//$.alert(localIds[0]);
$img.attr('src', localIds[0]).addClass('uploaded');
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
});
當(dāng)用戶選擇了所有的圖片之后,就需要上傳圖片了。這里就需要用到我們剛才定義的函數(shù)了,具體代碼如下所示:
//提交事件
$('#btnSubmit').on('click', function () {
var $chooseImages = $('#uploadImages img.uploaded');
if ($chooseImages.length === 0) {
$.alert('請(qǐng)上傳照片!');
return;
}
$.showPreloader('正在上傳照片...');
var localImagesIds = [];
$chooseImages.each(function () {
localImagesIds.push($(this).attr('src'));
});
uploadImages(localImagesIds);
});
如上面代碼所示,改處調(diào)用了函數(shù)uploadImages,然后將localImagesIds傳遞過(guò)來(lái)了。在uploadImages函數(shù)中,使用了遞歸,但一張圖片上傳完成后,就會(huì)再次調(diào)用本身,繼續(xù)上傳下一張圖片,請(qǐng)注意以下關(guān)鍵代碼:
wx.uploadImage({
localId: localId, // 需要上傳的圖片的本地ID,由chooseImage接口獲得
isShowProgressTips: 1, // 默認(rèn)為1,顯示進(jìn)度提示
success: function (res) {
serverIds.push(res.serverId); // 返回圖片的服務(wù)器端ID
localImagesIds.shift();
uploadImages(localImagesIds);
},
fail: function (res) {
$.alert('上傳失敗,請(qǐng)重新上傳!');
}
});
這樣,一切看起來(lái)是OK的,而且Android系統(tǒng)沒(méi)有任何問(wèn)題。但是,IOS卻無(wú)法正常上傳,一直會(huì)顯示加載狀態(tài)。代碼反復(fù)檢查,木有任何問(wèn)題,那么肯定是微信的坑了。。。。
歷經(jīng)九九八十一難,終于找到解決辦法:
var localId = localImagesIds[0];
//解決IOS無(wú)法上傳的坑
if (localId.indexOf("wxlocalresource") != -1) {
localId = localId.replace("wxlocalresource", "wxLocalResource");
}
uploadImages全部代碼如下所示:
function uploadImages(localImagesIds) {
if (localImagesIds.length === 0) {
$.showPreloader('正在提交數(shù)據(jù)...');
$('form').submit();
}
var localId = localImagesIds[0];
//解決IOS無(wú)法上傳的坑
if (localId.indexOf("wxlocalresource") != -1) {
localId = localId.replace("wxlocalresource", "wxLocalResource");
}
wx.uploadImage({
localId: localId, // 需要上傳的圖片的本地ID,由chooseImage接口獲得
isShowProgressTips: 1, // 默認(rèn)為1,顯示進(jìn)度提示
success: function (res) {
serverIds.push(res.serverId); // 返回圖片的服務(wù)器端ID
localImagesIds.shift();
uploadImages(localImagesIds);
},
fail: function (res) {
$.alert('上傳失敗,請(qǐng)重新上傳!');
}
});
}
以上所述是針對(duì)微信JSSDK多圖片上傳并且解決IOS系統(tǒng)上傳一直加載的問(wèn)題的相關(guān)介紹,希望對(duì)大家有所幫助!
- vue使用axios實(shí)現(xiàn)文件上傳進(jìn)度的實(shí)時(shí)更新詳解
- ios用AFN進(jìn)行文件上傳的示例代碼
- iOS利用AFNetworking實(shí)現(xiàn)文件上傳的示例代碼
- Vue axios 中提交表單數(shù)據(jù)(含上傳文件)
- 移動(dòng)端html5圖片上傳方法【更好的兼容安卓IOS和微信】
- iOS開發(fā)中文件的上傳和下載功能的基本實(shí)現(xiàn)
- IOS中html5上傳圖片方向問(wèn)題解決方法
- 詳解利用exif.js解決ios手機(jī)上傳豎拍照片旋轉(zhuǎn)90度問(wèn)題
- IOS 開發(fā)獲取本地圖片路徑及上傳
- iOS實(shí)現(xiàn)文件上傳功能
相關(guān)文章
Flutter開發(fā)Widgets?之?PageView使用示例
這篇文章主要為大家介紹了Flutter開發(fā)Widgets?之?PageView使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
iOS實(shí)現(xiàn)動(dòng)態(tài)自適應(yīng)標(biāo)簽
這篇文章主要為大家詳細(xì)介紹了iOS動(dòng)態(tài)自適應(yīng)標(biāo)簽的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
iOS UITableView 與 UITableViewController實(shí)例詳解
這篇文章主要介紹了iOS UITableView 與 UITableViewController實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
iOS 讀取URL圖片并存儲(chǔ)到本地的實(shí)例
下面小編就為大家?guī)?lái)一篇iOS 讀取URL圖片并存儲(chǔ)到本地的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
iOS簡(jiǎn)單抽屜效果的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了iOS簡(jiǎn)單抽屜效果的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
IOS開發(fā)筆記之禁用手勢(shì)滑動(dòng)返回功能的示例
本篇文章主要介紹了IOS開發(fā)筆記之禁用手勢(shì)滑動(dòng)返回功能的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
解決iOS11刷新tableview會(huì)出現(xiàn)漂移的現(xiàn)象
這篇文章主要介紹了解決iOS11刷新tableview會(huì)出現(xiàn)漂移的現(xiàn)象,需要的朋友可以參考下2017-10-10

