pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.file</groupId>
<artifactId>FileService</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>FileService</name>
<description>FileService</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.5.14</spring-boot.version>
</properties>
<dependencies>
<!-- io常用工具类 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version> <configuration>
<mainClass>com.file.FileServiceApplication</mainClass>
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Controller
package com.file.controller;
import com.file.utils.MongoDBGridFs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private MongoDBGridFs mongoDBGridFs;
@Autowired
private MongoTemplate mongoTemplate;
//文件上传
@PostMapping("/upload")
public String upload(MultipartFile file) throws IOException {
return mongoDBGridFs.saveFile(file);
}
@GetMapping("/download")
public void download(boolean online,String fileId, HttpServletResponse response){
mongoDBGridFs.getFile(online,fileId,response);
}
@PostMapping("/del")
public String del(@RequestParam("fileId") String fileId){
mongoDBGridFs.deleteFile(fileId);
return "删除文件成功";
}
@GetMapping("/findAll")
public Object findALl(){
return mongoDBGridFs.findAll();
}
}
工具类:MongoDBGridFs
package com.file.utils;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.client.gridfs.model.GridFSFile;
import org.apache.commons.io.IOUtils;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
@Component
public class MongoDBGridFs {
@Autowired
private GridFsTemplate gridFsTemplate;
//将Workbook文件转换成file文件
// public MultipartFile workbookToMultipartFile(Workbook workbook, String fileName) throws IOException {
// ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// workbook.write(outputStream);
// byte[] bytes = outputStream.toByteArray();
// return new MockMultipartFile(fileName, fileName, null, bytes);
// }
//上传文件
// 保存文件
public String saveFile(MultipartFile file) throws IOException {
// 新文件名
String originalFilename = file.getOriginalFilename();
// 获得文件输入流
InputStream ins = file.getInputStream();
// 获得文件类型
String contentType = file.getContentType();
// 将文件存储到mongodb中,mongodb将会返回这个文件的具体信息
// ObjectId objectId = gridFsTemplate.store(ins, originalFilename, contentType);
// 上传文件中我们也可以使用DBObject附加一些属性
DBObject metadata = new BasicDBObject();
//metadata.put("hello","word");
ObjectId objectId = gridFsTemplate.store(ins, originalFilename, contentType, metadata);
return objectId.toString();
}
// 下载文件
public void getFile(boolean online,String id, HttpServletResponse response) {
GridFsResource resource = null;
try {
// 根据文件ID从GridFS中获取文件
GridFSFile file = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id)));
if (file != null) {
// 设置响应头信息
String filename = URLEncoder.encode(file.getFilename(), "UTF-8");
String contentType = file.getMetadata().getString("contentType");
response.setContentType(contentType);
if(online){
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
}
// 从GridFS中获取文件流并写入响应输出流
resource = gridFsTemplate.getResource(file);
try (InputStream inputStream = resource.getInputStream();
BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream())) {
IOUtils.copy(inputStream, outputStream);
// 刷新响应缓冲区
response.flushBuffer();
}
} else {
// 文件不存在,返回空响应
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void deleteFile(String fileId){
//根据文件id删除fs.files和fs.chunks中的记录
gridFsTemplate.delete(Query.query(Criteria.where("_id").is(fileId)));
}
public List<GridFSFile> findAll(){
List<GridFSFile> files =gridFsTemplate.find(new Query()).into(new ArrayList<>());
// 打印文件信息
for (GridFSFile file : files) {
System.out.println("文件ID: " + file.getObjectId());
System.out.println("文件名称: " + file.getFilename());
System.out.println("文件大小: " + file.getLength());
System.out.println("上传时间: " + file.getUploadDate());
System.out.println("----------------------------");
}
return files;
}
}
application.properties
# åºç¨æå¡ WEB 访é®ç«¯å£
server.port=9092
# Spring??
spring.data.mongodb.database=test
spring.data.mongodb.uri=mongodb://1ocalhost:27017/
# uri: mongodb://localhost:27017/
感兴趣的朋友 可以在网盘里下载,整个项目都放在里面了
通过百度网盘分享的文件:FileService.zip
链接:https://pan.baidu.com/s/11SqbIfpMwG8gBRK8Y1xeQg?pwd=ui9i
提取码:ui9i