uni-app uploadFile上传文件偶现500错误,重新打包安装后可恢复,但一段时间后问题复现

发布于 1周前 作者 nodeper 来自 Uni-App

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错误问题。

回到顶部