网站首页/ 信息中心/ 档案百科/

档案工程系统从零搭建:基于SpringBoot与Vue的实操指南

发布时间:2026年06月30日 14:10:17 浏览量:0

一、环境准备与依赖安装

在开始编码前,必须确保本地开发环境已配置以下基础组件。请严格按照版本号安装,避免因版本不兼容导致启动失败。

MinIO启动命令示例(Windows PowerShell):

minio server D:\data --console-address ":9001"

执行后访问 http://localhost:9001,默认账号密码均为 minioadmin。登录后创建一个名为 archive-bucket 的Bucket,并将访问策略设置为 Public。

二、数据库设计与初始化

我们需要设计两张核心表:t_archive(档案主表)和 t_category(分类表)。请在MySQL客户端执行以下SQL脚本。

CREATE DATABASE IF NOT EXISTS archive_system DEFAULT CHARSET utf8mb4;
USE archive_system;
-- 分类表
CREATE TABLE t_category (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
category_name VARCHAR(100) NOT NULL COMMENT '分类名称',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 档案主表
CREATE TABLE t_archive (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL COMMENT '档案标题',
category_id BIGINT COMMENT '所属分类ID',
file_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
file_url VARCHAR(500) NOT NULL COMMENT '文件存储路径/URL',
file_size BIGINT COMMENT '文件大小(字节)',
uploader VARCHAR(50) DEFAULT 'admin' COMMENT '上传人',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

三、后端实现(Spring Boot)

使用Spring Initializr创建项目,依赖选择:Spring Web、MyBatis Framework、MySQL Driver、Lombok。

1. 添加Maven依赖

在 pom.xml 中手动添加MinIO客户端依赖:


io.minio
minio
8.5.7


com.baomidou
mybatis-plus-boot-starter
3.5.3.1

2. 配置文件

编辑 src/main/resources/application.yml,填入完整的数据库和MinIO连接信息:

server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/archive_system?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
minio:
endpoint: http://localhost:9000
accessKey: minioadmin
secretKey: minioadmin
bucketName: archive-bucket

3. 核心实体类与配置

Archive.java(使用Lombok简化Getter/Setter):

档案工程系统从零搭建:基于SpringBoot与Vue的实操指南

package com.example.archive.entity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class Archive {
private Long id;
private String title;
private Long categoryId;
private String fileName;
private String fileUrl;
private Long fileSize;
private String uploader;
private LocalDateTime createdAt;
}

MinioConfig.java(初始化MinIO客户端):

package com.example.archive.config;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MinioConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
}

4. 业务层与控制层

ArchiveController.java(包含上传和列表查询接口):

package com.example.archive.controller;
import com.example.archive.entity.Archive;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("/api/archive")
public class ArchiveController {
@Autowired
private MinioClient minioClient;
@Autowired
private JdbcTemplate jdbcTemplate;
@Value("${minio.bucketName}")
private String bucketName;
@Value("${minio.endpoint}")
private String endpoint;
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file,
@RequestParam("title") String title,
@RequestParam("categoryId") Long categoryId) throws Exception {
// 1. 生成唯一文件名
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String objectName = UUID.randomUUID().toString() + suffix;
// 2. 上传到MinIO
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build()
);
// 3. 保存元数据到MySQL
String fileUrl = endpoint + "/" + bucketName + "/" + objectName;
String sql = "INSERT INTO t_archive (title, category_id, file_name, file_url, file_size) VALUES (?, ?, ?, ?, ?)";
jdbcTemplate.update(sql, title, categoryId, originalFilename, fileUrl, file.getSize());
return "上传成功,访问路径:" + fileUrl;
}
@GetMapping("/list")
public List list() {
String sql = "SELECT  FROM t_archive ORDER BY created_at DESC";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Archive.class));
}
}

四、前端实现(Vue 3 + Element Plus)

前端使用Vue 3 Composition API和Element Plus组件库,实现文件上传和表格展示。

1. 项目初始化

在终端执行:

npm create vue@latest archive-frontend
cd archive-frontend
npm install element-plus axios

2. 配置Element Plus

修改 src/main.js:

import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
const app = createApp(App)
app.use(ElementPlus)
app.mount('app')

3. 页面组件开发

修改 src/App.vue,完整代码如下:



五、启动与验证

完成上述代码编写后,按以下顺序启动服务:

  1. 启动MySQL:确保数据库服务正在运行,且已执行第二步的SQL脚本。
  2. 启动MinIO:确保MinIO服务已启动,且Bucket已创建。
  3. 启动后端:在IDEA中运行 ArchiveApplication 主类,或在项目根目录执行 mvn spring-boot:run。看到控制台输出 Started ArchiveApplication 表示后端就绪。
  4. 启动前端:在 archive-frontend 目录下执行 npm run dev。终端会显示本地访问地址,通常是 http://localhost:5173。

打开浏览器访问前端地址,输入标题、选择一个本地文件,点击“提交档案”。成功后下方表格会立即刷新,显示新上传的档案记录,点击“查看”即可在新标签页打开MinIO中的文件。至此,一个具备基础文件存储能力的档案工程系统已落地。

档案整理收费标准按整理时间,到底怎么算才不吃亏?
档案整理收费标准按整理时间,到底怎么算才不吃亏?
你是不是也遇到过这种情况?家里堆了几十年的老文件、公司里积压成山的旧资料,想找个专业的人来整理,结果一问价格,有的说按小时收费,有的说按天算,还有的给你报个总价但说不清怎么算出来的。最后钱花出去了,效...
2026年06月30日 14:10:17
档案管理系统邮件认证,这玩意儿到底怎么搞?
档案管理系统邮件认证,这玩意儿到底怎么搞?
这事儿吧,我见过太多人踩坑了。一提到档案系统,很多人脑子里就是一堆表格、编号,冷冰冰的。但说到“邮件认证”,嘿,不少人就开始挠头了,这不就是收个验证码吗?还真不是你想的那么简单。
2026年06月30日 14:10:17
档案制度建设服务质量不高解决方案有哪些?
档案制度建设服务质量不高解决方案有哪些?
解决档案制度建设服务质量不高问题,可通过标准化建设、人员赋能、动态监督三个维度落地科学的档案制度建设服务质量不高解决方案,能够有效提升档案管理服务的合规性与实用性。接下来本文将从实操角度,详细拆解具体...
2026年06月30日 14:10:17
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818