微信小程序上傳下載本地圖片以及微信文件
最近在做一個(gè)云盤服務(wù)項(xiàng)目莺掠,想搭建到微信小程序上闲礼,然后講一下微信小程序中上傳和下載的坑
首先申明一下寡具,這個(gè)功能真是煩惱了我好久秤茅,因?yàn)轫?xiàng)目中要用到上傳word/ppt等文件,找度娘查了半天童叠,對(duì)著開(kāi)發(fā)者文檔API看了半天框喳,發(fā)現(xiàn)根本沒(méi)有調(diào)起手機(jī)文件管理器去選擇文件上傳的API,在微信小程序中是==不能調(diào)用==手機(jī)系統(tǒng)的==文件管理==功能的O锰场N蹇濉!
但是圖片視頻這些你已經(jīng)授權(quán)給微信的一些功能是可以調(diào)用的杜秸,微信也提供了一個(gè)api—chooseMessageFile
可以獲取微信聊天文件
上傳本地圖片(多張一起上傳)
wx.chooseImage({
success: function(res) {
console.log(res);
count:9; //限制選擇數(shù)量
console.log(res.tempFilePaths) //打印獲取到圖片的臨時(shí)地址
let size = 0;
var namelist = [];
// 這是為了給圖片命名放仗,用時(shí)間命名
var date = new Date();
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var h = date.getHours();
var min = date.getMinutes();
var s = date.getSeconds();
// var i = 0
console.log(y, m, d)
//我這邊計(jì)算了一下文件的大小
for(var a in res.tempFiles){
size += res.tempFiles[a].size
namelist.push(
'm'+y + '' + m + '' + d + '' + h + '' + min+'' +s+ '-' +a+'.jpg'
)
}
console.log(namelist)
if (size < 31457280){
console.log('上傳')
// 循環(huán)上傳
for (var i = 0; i < res.tempFilePaths.length;i++){
list.push({
name: namelist[i],
attribute: 'file',
})
vm.setData({
list: list
})
wx.uploadFile({
url: app.globalData.url + "/index/upload",
filePath: res.tempFilePaths[i],
name: 'file', // 上傳的key,和服務(wù)器上的一致
header: {
"Content-Type": "multipart/form-data",
'Cookie': app.globalData.cookie
},
// 和wx.request中的data是一樣的東西,上傳接口參數(shù)
formData: {
'name': namelist[i],
'path': vm.data.local_file
},
success(res) {
console.log(res)
}
})
}
}else{
wx.showToast({
title: '你選中的圖片超過(guò)30M亩歹!',
icon:'none'
})
}
},
})
上傳微信文件
wx.chooseMessageFile({
count:1,
// type:'file',
success(res){
var fname = res.tempFiles[0].name
console.log(res.tempFiles[0])
if (res.tempFiles[0].size < 31457280) {
wx.uploadFile({
url: app.globalData.url + "/index/upload",
filePath: res.tempFiles[0].path,
name:'file',
header: {
"Content-Type": "multipart/form-data",
'Cookie': app.globalData.cookie
},
formData:{
'name': res.tempFiles[0].name,
'path': vm.data.local_file
},
success(res){
console.log(res)
list.push({
name: fname,
attribute: 'file',
})
vm.setData({
list: list
})
}
})
}else{
wx.showToast({
title: '你選中的文件超過(guò)30M匙监!',
icon: 'none'
})
}
}
})
下載文件并打開(kāi)
這里提醒一下凡橱,文件下載下來(lái)的是
臨時(shí)文件
,打開(kāi)來(lái)是可以預(yù)覽的亭姥,如果點(diǎn)轉(zhuǎn)發(fā)發(fā)給別人的是無(wú)法打開(kāi)的文件稼钩。 - - 我沒(méi)有找到解決方法,試用了savafile达罗,F(xiàn)ileSystemManager等API都不能把這個(gè)臨時(shí)文件變成我們要的格式坝撑,而且本地文件存儲(chǔ)的大小限制為 10M
,如果有大神知道如何轉(zhuǎn)化粮揉,告知我一下非常感謝
wx.downloadFile({
url: app.globalData.url + "/index/download?path=" + vm.data.local_file+'/'+ vm.data.filename,
header: {
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': app.globalData.cookie
},
success(res) {
if (res.statusCode === 200) {
console.log(res)
var filePath = res.tempFilePath
// 打開(kāi)這個(gè)文件
wx.openDocument({
filePath: filePath,
success: function (res) {
console.log('打開(kāi)文檔成功')
}
})
}
}
})