返回

Spring Boot与Vue.js:从上传图片到返回URL的完整指南

后端

前端实现

1. 安装Vue.js和ElementUI

首先,我们需要在项目中安装Vue.js和ElementUI。您可以使用以下命令:

npm install vue
npm install element-ui

2. 创建Vue组件

接下来,我们需要创建一个Vue组件来处理图片上传。这个组件将包含一个文件选择器,一个按钮来触发上传,以及一个显示上传进度的进度条。

// UploadImage.vue
<template>
  <div class="upload-image">
    <el-upload
      :action="uploadUrl"
      :show-file-list="false"
      :on-success="handleSuccess"
      :on-progress="handleProgress"
    >
      <el-button type="primary">上传图片</el-button>
    </el-upload>
    <el-progress :percentage="progress" :stroke-width="18"></el-progress>
  </div>
</template>

<script>
import { ref } from 'vue'
import { ElUpload, ElProgress } from 'element-ui'

export default {
  components: {
    ElUpload,
    ElProgress
  },
  setup() {
    const uploadUrl = 'http://localhost:8080/api/upload'
    const progress = ref(0)

    const handleSuccess = (response) => {
      console.log(response)
    }

    const handleProgress = (event) => {
      progress.value = event.percent
    }

    return {
      uploadUrl,
      progress,
      handleSuccess,
      handleProgress
    }
  }
}
</script>

3. 注册组件

最后,我们需要在Vue实例中注册这个组件。

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import UploadImage from './components/UploadImage.vue'

const app = createApp(App)

app.component('UploadImage', UploadImage)

app.mount('#app')

后端实现

1. 导入依赖

首先,我们需要在SpringBoot项目中导入必要的依赖。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>runtime</scope>
</dependency>

2. 创建实体类

接下来,我们需要创建一个实体类来存储图片元数据。

import javax.persistence.*;

@Entity
@Table(name = "images")
public class Image {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String name;

  private String url;

  // getters and setters
}

3. 创建Repository

接下来,我们需要创建一个Repository来操作图片实体。

import org.springframework.data.jpa.repository.JpaRepository;

public interface ImageRepository extends JpaRepository<Image, Long> {

}

4. 创建Controller

最后,我们需要创建一个Controller来处理文件上传请求。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@RestController
@RequestMapping("/api/upload")
public class UploadController {

  @Autowired
  private ImageRepository imageRepository;

  @PostMapping
  public Image upload(@RequestParam("file") MultipartFile file) throws IOException {
    String fileName = file.getOriginalFilename();
    String url = "http://localhost:8080/images/" + fileName;
    Image image = new Image();
    image.setName(fileName);
    image.setUrl(url);
    imageRepository.save(image);
    return image;
  }
}

运行项目

现在,我们可以运行项目了。在终端中,输入以下命令:

mvn spring-boot:run

然后,您就可以在浏览器中访问http://localhost:8080来查看项目了。

结论

本文向您展示了如何使用SpringBoot和Vue.js实现图片上传功能,并返回图片的URL。我希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。