小Hello先生 2024-05-31 17:53 采纳率: 95.5%
浏览 4
已结题

前后端数据传输,文件上传不到数据库

用表单传数据,但是上传文件功能实现不了,其他数据都能传到数据库表,文件传进去是空的(不是null):
1 数据库表情况:

img


前端代码:
2 表单:

img


3 传数据js函数:

img


4 传文件按钮js函数:

img


5 后端controller代码:这里通过测试是可以获取到文件的相关数据的

img


不知道是不是表单传数据的双向绑定哪里出错了,获取不到文件的值?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-31 17:54
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在前端使用了uni-app框架,后端使用的是Spring Boot。从代码来看,前端部分似乎没有正确处理文件上传,导致文件没有传递给后端。以下是针对前端和后端的一些调整建议。

    首先,前端 uni-app 部分:

    1. 在表单中添加一个隐藏输入框用于存储文件名,这样在提交表单时可以将文件名一并发送到后端。
    2. 更新 submitForm 函数,以便在文件上传完成后更新隐藏输入框的值,并重新触发表单提交。

    修改后的HTML:

    <!-- 添加隐藏输入框 -->
    <input type="hidden" name="jlFileName" v-model="jlFileName">
    

    修改后的JS:

    data() {
      return {
        // ... 其他数据
        jlFileName: '', // 新增字段,用于存储文件名
      };
    },
    
    methods: {
      async submitForm(formName) {
        if (this.form.name && this.form.gw) {
          // 确保jlFileName已设置为正确的文件名
          await this.setJlFileName();
          
          // 提交表单
          this.$http.post('/qz/save', {
            userId: '111',
            xm: this.form.name,
            gw: this.form.gw,
            nl: this.form.age,
            xl: this.form.xl,
            xh: this.form.sex,
            j1: this.form.j1,
            1xfs: this.form.phone,
            jlFileName: this.jlFileName, // 使用jlFileName字段
          }).then((res) => {
            alert('发送成功!');
          }).catch((err) => {
            alert('发送失败!');
          });
        }
      },
    
      async setJlFileName() {
        if (this.form.jl) {
          const tempFilePaths = this.form.jl.tempFilePaths;
          for (let i = 0; i < tempFilePaths.length; i++) {
            // ... 保持upload()函数不变
          }
          this.jlFileName = tempFilePaths[0]; // 或者根据实际需求取最后一个文件名
        } else {
          console.error('请选择文件');
        }
      },
    
      upload() {
        // ... 保持upload()函数不变
      },
    },
    

    然后,后端 Spring Boot 部分:

    1. 为了确保文件名与前端一致,你需要在后端接收文件时同时获取文件名。
    2. 如果你想在数据库中存储文件信息,你需要考虑如何将文件保存到服务器,以及如何在数据库中存储文件路径或其他相关信息。

    在你的现有代码基础上进行一些调整:

    @PostMapping("/upload")
    public R upload(@RequestParam("file") MultipartFile file, @RequestParam("jlFileName") String jlFileName) throws IOException {
        // ... 保持获取原始文件名的部分不变
    
        // 使用从前端接收到的jlFileName
        String id = UUID.randomUUID().toString();
        id = id.replace("-", " ");
        id += "_" + jlFileName;
    
        // ... 保持剩余部分不变
    }
    

    这些修改应该能让你的前端将文件及其名称一起发送到后端。然而,关于后端如何处理文件和将其保存到数据库,这取决于你的具体需求和架构。通常做法是将文件保存到服务器某个目录,并在数据库中记录文件的路径或者其他关键信息,例如文件名、大小等。如果你需要进一步的帮助,比如如何在Spring Boot中保存文件到特定位置以及如何在数据库中存储这些信息,请告诉我,我会提供更详细的指导。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月15日
  • 已采纳回答 6月7日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵