spingboot mongoDB实现文件的上传、下载、预览

devtools/2024/9/23 10:17:21/

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 {@Autowiredprivate MongoDBGridFs mongoDBGridFs;@Autowiredprivate 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 {@Autowiredprivate 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

http://www.ppmy.cn/devtools/92590.html

相关文章

开源应用:AI监测如何成为社会安全的智能盾牌

社会背景 随着社会的快速发展&#xff0c;社会安全管理正站在一个新时代的门槛上。社会对安全管理的需求不断增长&#xff0c;传统的安全措施已难以满足现代社会的需求。AI技术以其独特的数据处理和模式识别能力&#xff0c;正在成为我们社会安全的智能盾牌。 AI大模型识别功能…

计算机毕业设计选题推荐-电缆行业生产管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Codeforces Round 961 【C. Squaring】

C. Squaring 题目大意&#xff1a; 给你一个长度为n的数组&#xff0c;求最少次操作&#xff0c;使得数组&#xff08;非严格&#xff09;递增。一次操作&#xff1a;Ai 变为 Ai^2。 不可能实现输出-1。 关键思路&#xff1a; 分子分母同时取对数&#xff0c;比值不变。 …

代码随想录算法训练营 | 贪心算法 part01

贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 什么是局部最优&#xff0c;局部最优能否推出全局最优&#xff08;举反例 举不出来的时候就可以试试贪心&#xff09; 455.分发饼干 455.分发饼干 局部最优&#xff1a;大饼干就要优先分给胃口大的孩子&am…

.ps1文件执行报错,但是相同的代码直接复制到windows powershell里面能成功执行。

报错&#xff1a; “magick”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 C:\Users\23121\Desktop\pic2mark.ps1:9 字符: 1 magick $inputFilePath $output…

Html实现全国省市区三级联动

目录 前言 1.全国省市区的Json数据 2.找到Json数据文件(在此博文绑定资源)之后&#xff0c;放到resource目录下。 3.通过类加载器加载资源文件&#xff0c;读取Json文件 3.1 创建JsonLoader类 3.2 注入JsonLoader实体&#xff0c;解析Json文件 4.构建前端Html页面 5.通过…

Qt QTableWidget 去除序号列

ui->tableWidget->verticalHeader()->setHidden(true);//垂直序列号&#xff08;表左侧&#xff09;ui.tableWidget->horizontalHeader()->setHidden(true);//水平序列号&#xff08;表上方&#xff09;删除后效果图&#xff1a;

nginx和php工具的使用

一、本地主机通过域名访问自己写的网页 1、开启phpstudy 2、找到phpstudy目录下的www文件夹&#xff0c;创建less01文件夹、index.html、web.php文件&#xff0c;进行配置&#xff0c;如下图&#xff1a; 3、重启一下phpstudy&#xff0c;然后访问网页 4、上面只能通过文件目录…