uni-app uploadFile上传文件偶现500错误,重新打包安装后可恢复,但一段时间后问题复现
uni-app uploadFile上传文件偶现500错误,重新打包安装后可恢复,但一段时间后问题复现
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 无 | HBuilderX |
Android | Android 13 | - |
HBuilderX | 4.24 | - |
操作步骤:
云端打包安装运行一段时间后 出现
预期结果:
上传成功
实际结果:
code 为500 重新安装打包后 又能实现
bug描述:
uploadFile上传文件出现偶现上传文件请求地址返回500,重新打包安装后 又可以上传,一段时间后又出现这种问题
await uni.uploadFile({
url: process.uniEnv.BASE_URL + "/ykt/file/upload",
filePath: tempFilePaths,
name: "file",
header: {
"Content-Type": "multipart/form-data",
Authorization: "Bearer " + uni.getStorageSync("Token"),
},
success: (uploadFileRes) => {
let data = JSON.parse(uploadFileRes.data);
console.log("获取文件信息", uploadFileRes);
if (data.code == 200) {
this.contrastFace(data.data);
} else {
uni.hideLoading();
uni.showToast({
title: "请重新上传!",
icon: "error",
duration: 2000,
});
}
},
fail:(err)=>{
console.log(err);
}
});
https://ask.dcloud.net.cn/question/101196 在这个问答内看到了 有点类似 不过 我当前hx版本为4.24 会偶然出现这种问题
2 回复
文件请求地址返回500,是服务端错误。需要先检查一下服务端的代码为什么报错。
针对你提到的uni-app中uploadFile
上传文件时偶现500错误,并在重新打包安装后可恢复但问题复现的情况,这通常可能是由于后端服务器问题、网络请求配置不当或前端代码中的某些随机性错误导致的。由于你要求尽量提供代码案例而非建议,我将展示一个更健壮的uploadFile
调用示例,并附带一些可能帮助调试和定位问题的代码片段。
1. 更健壮的uploadFile
调用示例
uni.uploadFile({
url: 'https://your-server.com/upload', // 后端接口地址
filePath: tempFilePaths[0], // 文件路径,可以是临时文件路径
name: 'file', // 后端接收的文件字段名
formData: {
'user': 'test'
},
success: (uploadFileRes) => {
console.log('上传成功:', uploadFileRes.data);
// 此处可以解析服务器返回的数据,进行后续处理
},
fail: (err) => {
console.error('上传失败:', err);
// 失败处理,可以尝试重试机制或提示用户
if (err.errCode === -1) {
uni.showToast({
title: '上传失败,请检查网络',
icon: 'none'
});
} else if (err.statusCode === 500) {
// 针对500错误,可以设计重试逻辑或记录错误日志
console.error('服务器内部错误,尝试稍后重试');
// 可添加重试逻辑,例如使用setTimeout进行延时重试
// setTimeout(() => {
// // 重新调用uploadFile函数
// }, 3000);
}
},
complete: () => {
console.log('上传完成');
}
});
2. 后端日志记录
虽然前端代码无法直接解决后端500错误,但你可以在后端增加日志记录,以便更好地诊断问题。以下是一个简单的Node.js Express示例,展示如何记录上传请求的日志:
const express = require('express');
const multer = require('multer');
const app = express();
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
console.log('文件上传请求接收:', req.file, req.body); // 记录请求详情
try {
// 处理文件保存等业务逻辑
res.status(200).send('文件上传成功');
} catch (error) {
console.error('处理文件上传时出错:', error); // 记录错误信息
res.status(500).send('服务器内部错误');
}
});
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
通过上述代码示例,你可以在前端增加错误处理和重试机制,同时在后端增强日志记录,以便更准确地定位和解决偶发的500错误问题。