不吃猫的鱼y 2024-10-30 21:04 采纳率: 81%
浏览 241
已结题

后端使用的是若依框架,目前上传图片提交后会报错,前端使用了vant4的组件(相关搜索:如何写)

这块的上传上传应该如何写,后端使用的是若依框架,目前上传图片提交后会报错,前端使用了vant4的组件

img

img

<template>
  <img style="height: 200px; width: 100%" src="../assets/010.jpg" alt="" />
  <div class="one">注册账号</div>
  <div class="text">
    <van-form @submit="onSubmit" label-align="right">
      <van-cell-group inset>
        <van-field v-model="state.userUsername" name="userUsername" placeholder="请输入用户名" label="用户名:"
          :rules="[{ required: true, message: '用户名不能为空!' }]" />
        <van-field v-model="state.userPassword" name="userPassword" placeholder="请输入密码" type="password" label="密码:"
          :rules="[{ required: true, message: '密码不能为空!' }]" />
        <van-field v-model="state.userpass2" name="userpass2" placeholder="请确认密码" type="password" label="确认密码:"
          :rules="[{ validator, validatorMessage: '请确认密码不能为空!' }]" />
        <van-field v-model="state.userPhone" name="userPhone" placeholder="请输入电话" label="电话号码:"
          :rules="[{ pattern, message: '请输入正确号码' }]" />
        <van-field name="userSex" label="性别:">
          <template #input>
            <van-radio-group v-model="state.userSex" direction="horizontal">
              <van-radio name="男"></van-radio>
              <van-radio name="女"></van-radio>
            </van-radio-group>
          </template>
        </van-field>
        <van-field v-model="state.userNickname" name="userNickname" placeholder="请输入昵称" label="昵称:"
          :rules="[{ required: true, message: '昵称不能为空!' }]" />
        <van-field v-model="state.userName" name="userName" placeholder="请输入姓名" label="姓名:"
          :rules="[{ required: true, message: '姓名不能为空!' }]" />
        <van-field name="userPic" label="头像上传">
          <template #input>
            <van-uploader v-model="state.userPic" />
          </template>
        </van-field>
      </van-cell-group>
      <div style="margin: 16px">
        <van-button round block type="primary" style="background-color: #f3a778;border: 0px;" native-type="submit">
          注册
        </van-button>
      </div>
    </van-form>
  </div>
  <van-divider :style="{ color: '#f3a778', borderColor: '#f3a778', padding: '0 16px' }" @click="tologin()">
    已有账号,返回登陆
  </van-divider>
</template>

<script setup>
import { ref } from "vue";
import { RegisterApi } from "@/api";
import { useRouter } from "vue-router";
import { showSuccessToast, showFailToast } from "vant";

const router = useRouter();

const state = ref({
  userUsername: "",
  userPassword: "",
  userpass2: "",
  userPhone: "",
  userSex: "",
  userNickname: "",
  userName: "",
});

const validatorMessage = (value) => {
  if (value === "") {
    return "确认密码不能为空!";
  }
  if (value !== state.value.Arrayuserpass) {
    return "两次密码要相同!";
  }
  return;
};

//正则表达式
const pattern = /^1[3-9]\d{9}$/;

const RegisterUser = async (e) => {
  const res = await RegisterApi(e);
  console.log(res.code, 'res.code')
  if (res.code == "200") {
    showSuccessToast("注册成功!");
    router.push("/login");

  } else {
    showFailToast("注册失败!");
  }
};
//返回登录
const tologin = () => {
  router.push("/login");
};
const onSubmit = (e) => {
  RegisterUser(e);
  console.log(e);
  console.log("+++++");
};
</script>

<style scoped>
.one {
  color: #000000;
  display: flex;
  justify-content: left;
  font-size: 30px;
  font-family: "宋体";
  font-weight: bold;
  margin-left: 20px;
}

.van-field_error_message {
  color: aqua !important;
}

.btn {
  width: 300px;
  margin-left: 10%;
  height: 50px;
  background-color: #48e1e3;
  color: white;
  border-radius: 20px;
  border: 0px;
}

.text {
  color: aquamarine;
}
</style>


  • 写回答

13条回答 默认 最新

  • 阿里嘎多学长 2024-10-30 21:31
    关注

    AIGC生成:

    若依框架后端图片上传错误解决方案

    根据你的问题描述,你使用的是若依框架,前端使用了 Vant4 组件,图片上传后报错。下面是解决方案:

    后端代码

    // 使用 Spring Boot 2.3.0 及以上版本
    @RestController
    @RequestMapping("/api/upload")
    public class UploadController {
        @PostMapping("/image")
        public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
            // 上传图片处理逻辑
            String filePath = "/path/to/upload/directory/" + file.getOriginalFilename();
            try {
                file.transferTo(new File(filePath));
                return ResponseEntity.ok("上传成功");
            } catch (IOException e) {
                return ResponseEntity.badRequest().body("上传失败");
            }
        }
    }
    

    前端代码

    <template>
      <van-uploader v-model="fileList" :max-count="1" @upload-success="handleUploadSuccess">
        <img style="height: 200px" :src="fileList[0].url" />
      </van-uploader>
    </template>
    
    <script>
    export default {
      data() {
        return {
          fileList: []
        }
      },
      methods: {
        handleUploadSuccess(file) {
          console.log(file)
        }
      }
    }
    </script>
    

    解决方案

    1. 在后端代码中,使用 MultipartFile 接受文件上传,使用 transferTo 方法将文件保存到指定目录。
    2. 在前端代码中,使用 Vant4 的 van-uploader 组件实现图片上传,使用 @upload-success 事件处理上传成功后的逻辑。

    注意

    • 在后端代码中,需要将文件上传路径配置到 application.properties 文件中。
    • 在前端代码中,需要将图片 URL 保存到 fileList 数组中,以便在图片上传成功后显示图片。

    希望这个解决方案能够帮助你解决图片上传错误问题。

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

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日