uni-app ——使用uploadFile上传多张图片

文章讲述了在uni-app中如何使用uni.uploadFile方法上传图片到后端接口,强调了查看官方文档的重要性,特别是对于app和小程序平台差异的注意点,如app需循环调用API上传多张图片,而小程序不支持。
前言:最近的工作中出现了一个功能点,具体写法我在前面的文章中已经阐述过,不过之前的情况是上传图片调用后端的一个接口,整个表单页面提交的时候调用的是另一个接口,我也从中学到了另外的一种方法,写到这里分享给大家。

一、需求概述

此次的后端接口需要三个参数,分别是文章标题和文章内容以及文章中的图片,在用户点击保存文章时需要这三个参数的传递。那么这个时候其实就已经完成了图片的上传以及文章的保存。

二、相关文档

做这个功能的过程中我更加确定了一件事情,一定要看文档,看文档,看文档!!!重要的事情

说三遍,使用类似uni-app这种api一定要看相关描述的官方文档,人家都说了是官方文档,就是写给开发人员参考使用的,所以就不要去瞎百度,找些乱七八糟的方法,我就遇到了这个坑,后来我还是看了官方文档解决的这个问题

这里已经使用uni-app中uploadFIle将本地临时资源提交到服务器中,但是请注意!!!!app的上传多张图片是必须要循环调用该api的,小程序暂时不支持上传多张图片,如下图所示:

三、具体实现方法

写到这里我真的想说句fuck为啥呢,因为我一直知道这个功能其实很简单,但是官方文档看的不仔细,又参考了一些乱七八糟的方法,最终还是回到了参考官方文档的这个方法,所以大家,恩,记得看文档!

具体的实现方法和参数说明

uni-app提供了uni.uploadFile方法来实现文件上传功能。该方法可以将本地的文件上传到服务器,并且可以携带额外的参数。使用uni.uploadFile方法可以方便地实现文件上传功能,具体步骤如下:

  1. 首先,调用uni.chooseImage或uni.chooseVideo方法选择文件,并在成功回调中获取文件的本地路径。

  1. 然后,调用uni.uploadFile方法,将文件上传到服务器。该方法需要提供如下参数:

  • url:上传文件的地址

  • filePath:要上传的文件的本地路径

  • name:服务器接收文件时对应的参数名

  • formData:除了文件之外要上传的数据,是一个对象。

  • success:上传成功后的回调函数

  • fail:上传失败后的回调函数

  • complete:上传完成后的回调函数

下面是一个简单的文件上传例子:

    saveArticle(data) {
                data.fi.forEach(item => {
                    uni.uploadFile({
                        url: `${base_url}/basic/pad/ut/article/saveImg`,
                        filePath: item,
                        name: 'fi',
                        formData: {
                            'til': data.til,
                            'con': data.con
                        },
                        header: {
                            'content-type': 'multipart/form-data'
                        },
                        success: (uploadFileRes) => {
                            console.log(uploadFileRes, '=》》》》》');
                            uni.showToast({
                                title: '上传成功!'
                            })
                        }
                    })
                })
            },

上面的代码中,我们选择了一张图片进行上传,然后通过uni.uploadFile方法将该图片上传到服务器上。其中,'your_upload_url'是上传文件的地址,'file'对应服务器端接收文件时的参数名,formData中包含了上传文件时携带的额外参数。上传成功后,可以在success回调函数中获取服务器返回的数据。

需要注意的是,uni.uploadFile方法在小程序和APP端调用时参数不一样,请根据实际情况进行修改。

### 使用 `uni.uploadFile` 实现多图片上传 在小程序开发中,使用 `uni.uploadFile` 进行多图片上传可以通过循环调用该函数来实现。每次选择图片后,获取临时文件路径数组,并依次上传每一张图片。 #### 客户端代码示例 ```javascript // 选择多张图片并逐个上传 uni.chooseImage({ count: 9, // 最大可以选择的图片数目 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 success: function(chooseImageRes) { const tempFilePaths = chooseImageRes.tempFilePaths; let uploadPromises = []; for (let i = 0; i < tempFilePaths.length; i++) { uploadPromises.push(new Promise((resolve, reject) => { uni.uploadFile({ url: 'https://example.com/upload', // 替换成实际服务器地址 filePath: tempFilePaths[i], name: 'file', formData: {'user': 'test'}, success: function(uploadFileRes) { resolve(JSON.parse(uploadFileRes.data)); }, fail: function(err) { reject(err); } }); })); } Promise.all(uploadPromises).then(results => { console.log('All files uploaded successfully:', results); }).catch(error => { console.error('Error occurred during file uploads:', error); }); } }); ``` 此段代码展示了如何通过 `uni.chooseImage()` 方法选取最多九张图片,并利用 JavaScript 的异步特性——Promise 来管理并发请求,从而有效地处理多个文件的同时上传[^2]。 #### 后端处理方案 对于后端而言,在接收到前端发送过来的数据包时需要注意解析 multipart/form-data 类型的内容。通常情况下,Web 框架会自动完成这部分工作;但如果遇到特定问题,则可能需要手动设置或调整配置项。 ##### PHP 示例(Laravel框架) ```php public function store(Request $request){ foreach ($request->allFiles()['file'] as $uploadedFile){ $path = $uploadedFile->store('uploads'); echo "Stored File Path:".$path."<br>"; } } ``` 上述PHP脚本适用于基于 Laravel 构建的应用程序,它遍历所有传入的文件对象并将它们保存到指定目录下[^4]。 另外值得注意的是,当涉及到跨平台应用(H5),应避免显式设定 content-type 为 multipart/form-data ,让浏览器自行决定边界参数可以减少一些不必要的麻烦[^3]。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值