用springboot,vue,mybatis和elementUl实现上传PDF文件到数据库,需要上传到数据库的内容有文件名,文件上传时间,文件路径,上传者的编号。请告诉我springboot配置文件,domain代码,controller代码,service代码,前端vue和element代码,mybatis代码和数据库建表语句,并用注释讲解
时间: 2023-05-30 08:07:55 浏览: 101
vue+springboot+element+vue-resource实现文件上传教程
1. Spring Boot配置文件
在application.properties中添加以下配置:
```
# 数据库配置
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yourDBName?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=yourPassword
# MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.domain
mybatis.configuration.map-underscore-to-camel-case=true
```
2. Domain代码
创建一个名为File的Java类,包含以下字段:
```
private Long id; // 文件ID
private String fileName; // 文件名
private String filePath; // 文件路径
private Date uploadTime; // 上传时间
private Long uploaderId; // 上传者ID
```
并提供对应的getter和setter方法。
3. Controller代码
创建一个名为FileController的Java类,包含以下方法:
```
// 上传文件
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file, HttpSession session) throws IOException {
// 获取上传者ID
Long uploaderId = (Long) session.getAttribute("userId");
// 获取上传时间
Date uploadTime = new Date();
// 保存文件到服务器
String fileName = file.getOriginalFilename();
String filePath = "/path/to/your/upload/folder/" + fileName;
File dest = new File(filePath);
file.transferTo(dest);
// 将文件信息保存到数据库
File newFile = new File();
newFile.setFileName(fileName);
newFile.setFilePath(filePath);
newFile.setUploaderId(uploaderId);
newFile.setUploadTime(uploadTime);
fileService.addFile(newFile);
return "上传成功";
}
// 下载文件
@GetMapping("/download/{id}")
public ResponseEntity<byte[]> downloadFile(@PathVariable Long id) throws IOException {
File file = fileService.getFileById(id);
String filePath = file.getFilePath();
String fileName = file.getFileName();
File dest = new File(filePath);
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<>(FileUtils.readFileToByteArray(dest), headers, HttpStatus.CREATED);
}
```
4. Service代码
创建一个名为FileService的Java接口,包含以下方法:
```
// 添加文件
void addFile(File file);
// 根据ID获取文件
File getFileById(Long id);
```
创建一个名为FileServiceImpl的Java类,实现FileService接口,并注入FileMapper,包含以下方法:
```
// 添加文件
@Override
public void addFile(File file) {
fileMapper.addFile(file);
}
// 根据ID获取文件
@Override
public File getFileById(Long id) {
return fileMapper.getFileById(id);
}
```
5. 前端Vue和Element代码
在html文件中,使用以下代码实现上传文件和下载文件:
```
<!-- 上传文件 -->
<el-upload
class="upload-demo"
ref="upload"
:action="'http://localhost:8080/file/upload'"
:on-success="handleUploadSuccess"
:before-upload="beforeUpload">
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
<!-- 下载文件 -->
<el-button size="small" type="primary" @click="downloadFile(file.id)">下载</el-button>
```
在Vue的methods中,实现以下方法:
```
// 上传文件前的处理
beforeUpload(file) {
const isPDF = file.type === 'application/pdf';
if (!isPDF) {
this.$message.error('只能上传PDF文件');
}
return isPDF;
},
// 上传文件成功后的处理
handleUploadSuccess(response, file) {
this.$message.success(response);
},
// 下载文件
downloadFile(id) {
window.open(`http://localhost:8080/file/download/${id}`);
}
```
6. MyBatis代码和数据库建表语句
在resources/mapper目录下,创建一个名为FileMapper.xml的文件,包含以下代码:
```
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.FileMapper">
<!-- 添加文件 -->
<insert id="addFile" parameterType="com.example.demo.domain.File">
INSERT INTO file (file_name, file_path, upload_time, uploader_id)
VALUES (#{fileName}, #{filePath}, #{uploadTime}, #{uploaderId})
</insert>
<!-- 根据ID获取文件 -->
<select id="getFileById" resultType="com.example.demo.domain.File">
SELECT id, file_name, file_path, upload_time, uploader_id
FROM file
WHERE id = #{id}
</select>
</mapper>
```
创建一个名为file的数据库表,包含以下字段:
```
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '文件ID',
file_name VARCHAR(255) NOT NULL COMMENT '文件名',
file_path VARCHAR(255) NOT NULL COMMENT '文件路径',
upload_time DATETIME NOT NULL COMMENT '上传时间',
uploader_id BIGINT(20) UNSIGNED NOT NULL COMMENT '上传者ID',
PRIMARY KEY (id),
INDEX uploader_id_index (uploader_id)
```
阅读全文