阿里云的人说SDK引用支持浏览器和NodeJS环境,不确定小程序能否使用,所以还是先别用这种直接引入ali-oss的方法了,最好让后端或者nodejs写个接口中转一下分片上传
readFile读取的ArrayBuffer无法上传OSShttps://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html 问题描述:在浏览器端选择的文件、文件转ArrayBuffer可以正常上传,小程序这边选中的文件、文件转ArrayBuffer无法上传到alioss,想请问下小程序选中的文件、readFile读取的ArrayBuffer与浏览器那边的格式不一样吗? [图片] import OSS from 'ali-oss' const client = new OSS({ // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。 region: stsCredentials.value.region, authorizationV4: true, // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。 accessKeyId: stsCredentials.value.sts.AccessKeyId, accessKeySecret: stsCredentials.value.sts.AccessKeySecret, // 从STS服务获取的安全令牌(SecurityToken)。 stsToken: stsCredentials.value.sts.SecurityToken, // 填写Bucket名称,例如examplebucket。 bucket: stsCredentials.value.bucket, }) const options = { // 获取分片上传进度、断点和返回值。 progress: (p, cpt, res) => { console.log(p) }, // 设置并发上传的分片数量。 parallel: 4, // 设置分片大小。默认值为1 MB,最小值为100 KB,最大值为5 GB。最后一个分片的大小允许小于100 KB。 partSize: 1024 * 1024, // headers, // 自定义元数据,通过HeadObject接口可以获取Object的元数据。 // meta: { year: 2020, people: "test" }, mime: 'multipart/form-data', } wx.chooseMedia({ count: 1, // 限制选择1个文件 mediaType: ['video'], // 只允许选择视频 maxDuration: 60, // 限制视频最大时长 success(res: any) { console.log('video', res) const videoFile = res.tempFiles[0] const videoFormat = videoFile.tempFilePath.split('.').pop() const name = userStore.userInfo.agent_id + '/video/' + generateUUID() + '.' + videoFormat const fs = wx.getFileSystemManager() fs.readFile({ filePath: videoFile.tempFilePath, position: 0, async success(res) { console.log('读取的数据', res.data) const data = res.data const resData = await client.multipartUpload(name, data, { ...options, }) console.log(resData) }, fail(res) { console.error(res) }, }) }, })
03-28用uploadTask上传视频一直失败,文件68MB,但是不用uploadTask定义,直接用uni.uploadFile就能成功,有人知道为什么吗 // 上传文件 uploadTask.value = uni.uploadFile({ url: ossUrl.value, // 临时凭证提供的上传URL filePath: videoFile.tempFilePath, // 视频文件路径 name: 'file', // 请求参数的文件字段名,后端接收文件时需要与该字段名一致 formData: formDataValue, timeout: 300000, success(uploadRes) { console.log('上传回调:', uploadRes) // uni.hideLoading() overUpload(true) model.video_url = ossUrl.value + '/' + formDataValue.key console.log('model.video_url', model.video_url) }, fail(error) { console.error('上传失败:', error) // uni.hideLoading() overUpload(false) }, complete: (res) => { uploadTask.value = null }, }) console.log('uploadTask.value', uploadTask.value) showUploadInfo.value = true uploadTask.value.onProgressUpdate((res: any) => { uploadProgress.value = res.progress console.log('上传进度', res.progress) // console.log('已经上传的数据长度', res.totalBytesSent) // console.log('预期需要上传的数据总长度', res.totalBytesExpectedToSend) })
开启封面广告后,真机测试,不会进入文件下载进度onProgressUpdate回调!在开启封面广告后永远不会进入onProgressUpdate回调,关闭正常,开发者工具中打开关闭封面广告都正常,只有真机会出现这个bug。 const DownloadTask = uni.downloadFile({ url: url, timeout: 12000, filePath: filePath, success: async (res) => {} )} DownloadTask.onProgressUpdate(res => { //在开启封面广告后永远不会进入onProgressUpdate回调,关闭正常,开发者工具中打开关闭封面广告都正常。 console.log(res.progress) })
03-26我用uploadFile上传一个68MB的文件总是失败,不用uploadTask = uni.uploadFile就能成功。请问下有人知道什么原因吗 // 上传文件 uploadTask.value = uni.uploadFile({ url: ossUrl.value, // 临时凭证提供的上传URL filePath: videoFile.tempFilePath, // 视频文件路径 name: 'file', // 请求参数的文件字段名,后端接收文件时需要与该字段名一致 formData: formDataValue, timeout: 300000, success(uploadRes) { console.log('上传回调:', uploadRes) // uni.hideLoading() overUpload(true) model.video_url = ossUrl.value + '/' + formDataValue.key console.log('model.video_url', model.video_url) }, fail(error) { console.error('上传失败:', error) // uni.hideLoading() overUpload(false) }, complete: (res) => { uploadTask.value = null }, }) console.log('uploadTask.value', uploadTask.value) showUploadInfo.value = true uploadTask.value.onProgressUpdate((res: any) => { uploadProgress.value = res.progress console.log('上传进度', res.progress) // console.log('已经上传的数据长度', res.totalBytesSent) // console.log('预期需要上传的数据总长度', res.totalBytesExpectedToSend) })
uploadTask.onProgressUpdate() 进度只有有 100?uploadTask.onProgressUpdate((res) => { console.log("----- 上传进度 -----", res.progress); if(res.progress < 100){ // 进度不足100时显示进度 wx.showLoading({ title: `上传中 ${res.progress}%`, }); } else if (res.progress == 100){ // 进度达到100时显示结果 wx.showToast({ title: '完成', icon: 'success' }); } })
03-26我只能说,一坨s*h*i*t
canvas2d画布无法使用drawImage绘制图片?[图片][图片][图片]无论是网络图片,还是本地选择图片都报这个错误,版本库都切换过,都不行
03-25为什么不支持chooseFile接口,uniapp的chooseFile多好用啊
wx.chooseMessageFile在windows中打开微信小程序不支持wx.chooseMessageFile({ count: 1, // 最多选择1个文件 type: 'all', // 文件类型为普通文件 success(res) { const tempFiles = res.tempFiles; console.log('选择的文件列表:', tempFiles); // 处理选中的文件 }, fail(err) { console.error('选择文件失败:', err); }, complete() { console.log('选择文件操作完成'); } }); windows打开微信小程序触发这个方法直接就执行complete了。
03-25用有效域名也一样拿不到音频时长,真机拿不到,开发者工具上可以
innerAudioContext不返回duration?,真机获取不到,只有微信开发者工具中可以[图片]
03-08