微信小程序脱坑——多图片/文件上传,返回上传URL数组

在学习微信小程序初期,多文件上传之后需要把上传的多文件URL和其余附属数据一起保存到数据库。不多说,直接上代码。初学者欢迎指出问题。

 上传多文件页面js

var that = this;

let name = '***';

let count = '0';

let fileName = '***';

let filePath = ‘*******************’;

app.uploadFiles(bannerImg, name, count, fileName, filePath, ''); //调用多文件上传方法上传到服务器banner图

var i = 0;

let isBanner = setInterval(function(e) { //利用定时器来获取上传的bannerURL

i++;

if (null != app.data.fileURLS) { //说明上传banner图完成并获取到文件URL数组

clearInterval(isBanner);//销毁定时器

var BannerURLs = app.data.fileURLS;

wx.request({})//上传多文件URL与附属信息到数据库

} else {

console.log('获取banner刷新了' + i + '秒');

}

}, 1000)

app.js 

 

利用递归方式实现多文件上传

/**

* 多文件上传

* fileList:上传文件集合

* name:后台接收文件名字

* count:从0开始,递归参数

* fileName:保存到服务器中的文件名字

* filePath:保存到服务器中的位置

* fileURLs:拼接服务器返回的上传文件URL(默认为'')

*/

uploadFiles(fileList, name, count, fileName, filePath, fileURLs) {

var that = this;

wx.uploadFile({

url: that.url + "base/uploadFiles.do",

filePath: fileList[count],

name: name,

formData: {

fileName: fileName + count,

filePath: filePath

}, //这里是上传图片时一起上传的数据

success: function (e) {

let fileURL = JSON.parse(e.data).fileURL;

if ('' != fileURLs) {//拼接链接

fileURLs = fileURL + "," + fileURLs

} else {

fileURLs = fileURL

}

},

fail: function (e) { },

complete: function (e) {

count++; //下一张

if (count == fileList.length) {

//上传完毕,作一下提示

var strs = new Array();

strs = fileURLs.split(",");

that.data.fileURLS = strs

console.log(fileName+'上传完毕')

} else {

//递归调用,上传下一张

that.uploadFiles(fileList, name, String(count), fileName, filePath, fileURLs);

}

}

})

}

### 微信小程序实现图片上传功能 #### 函数定义与初始化 为了实现在微信小程序上传图片的功能,需先引入必要的API配置好环境。在`app.js`文件中获取应用实例: ```javascript const app = getApp() ``` #### 用户界面交互 当用户点击按钮选择图片时,触发事件处理函数来打开相册或相机选取照片。 ```html <button bindtap="chooseImage">选择图片</button> <view wx:for="{{imageList}}" wx:key="index"> <image src="{{item}}"></image> </view> ``` #### 处理图像选择 编写`chooseImage()`方法用于调用微信内置接口让用户挑选多张本地图片,将其路径存储到页面数据对象里以便预览显示[^1]。 ```javascript Page({ data: { imageList: [] }, chooseImage() { const that = this; wx.chooseImage({ count: 9, // 默认最多可选数量 sizeType: ['original', 'compressed'], // 可以指定原图或压缩版 sourceType: ['album', 'camera'], // 来源方式(相册/拍照) success(res) { // 成功回调函数 console.log('Selected images:', res.tempFilePaths); let tempFilesPathArray = res.tempFilePaths; // 获取临时文件地址数组 that.setData({ // 更新视图状态 imageList: [...that.data.imageList,...tempFilesPathArray] }); } }) } }) ``` #### 执行上传操作 创建名为`uploadFileToServer()`的方法负责向服务器发送HTTP请求完成真正的文件传输过程。这里假设已经有一个可用的服务端接收点URL作为参数传递给此函数[^2]。 ```javascript function uploadFileToServer(filePath, serverUrl){ return new Promise((resolve,reject)=>{ wx.uploadFile({ url: serverUrl, filePath: filePath, name: 'file', formData:{'user':'test'}, // 如果有额外表单字段要一起提交 success(uploadRes){ // 文件成功上载后的响应体解析 resolve(JSON.parse(uploadRes.data)); }, fail(err){ reject(err); // 错误情况下的错误信息返回 } }) }) } ``` #### 封装成通用组件 考虑到不同场景下可能都需要用到相似的逻辑,因此建议把上述核心部分抽象出来形成独立的小部件,在其他地方按需引用即可达到良好的复用效果[^3]。 通过以上步骤就可以较为完整地实现了基于微信平台的应用程序内简单的多媒体资源管理能力——即允许终端使用者轻松便捷地将自己的摄影作品分享出去!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值