国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - Spring Boot使用GridFS實現文件的上傳和下載方式

Spring Boot使用GridFS實現文件的上傳和下載方式

2022-02-26 00:31我朋友說他好了 Java教程

這篇文章主要介紹了Spring Boot使用GridFS實現文件的上傳和下載方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用GridFS實現文件的上傳和下載

在這篇博客中,我們將展示如何使用Spring Boot中使用mongodb自帶的文件存儲系統GridFS實現文件的上傳和下載功能

首先了解一下怎么用命令操作GridFS

安裝mongodb

?
1
sudo apt-get install mongodb

安裝完成后找到mongofiles的位置

?
1
whereis mongofiles

找到之后進入目錄就可以上傳文件了

?
1
mongofiles put /home/ubuntu/Desktop/1.jpg

這時文件就添加成功了,進入mongodb查看

?
1
2
3
4
5
mongo
show dbs  # 發現多了一個gridfs
use gridfs
db.fs.files.find() # 存放文件的一些基本信息
db.fs.chunks.find() # 存放文件二進制內容,一個文件有多個fs.chunks,每個fs.chunks都有一個,files_id與fs.files中的id相對應,形成多對一的關系,文件存的時候分開存,取的時候再合并

使用Spring Boot操作GridFS

引入依賴

?
1
2
3
4
5
6
7
8
9
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
 <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

controller代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSDownloadStream;
import com.mongodb.client.gridfs.GridFSFindIterable;
import com.mongodb.client.gridfs.model.GridFSFile;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.gridfs.GridFsOperations;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import static org.springframework.data.mongodb.core.query.Query.query;
import static org.springframework.data.mongodb.gridfs.GridFsCriteria.whereFilename;
@RestController
public class ImageController {
    @Autowired
    private GridFsTemplate gridFsTemplate;
    @Autowired
    private GridFsOperations operations;
    @Autowired
    private GridFSBucket gridFSBucket;
    @PostMapping("file/upload")
    public ImageResponse upload(@RequestParam("file") MultipartFile file) {
        DBObject metaData = new BasicDBObject();
        // 把時間戳作為文件名存入mongodb
        String fileName = String.valueOf(System.currentTimeMillis());
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
            gridFsTemplate.store(inputStream, fileName, "image", metaData);
        } catch (IOException e) {
            throw new RuntimeException();
        }
        return new ImageResponse(fileName);
    }
    @GetMapping(value = "file/download/${fileName}", produces = MediaType.IMAGE_JPEG_VALUE)
    @ResponseBody
    public byte[] getImage(@PathVariable("fileName") String fileName) throws IOException {
        if (fileName == null) {
            return null;
        }
        // 根據文件名查詢(也可以根據md5值等信息查詢)
        GridFSFindIterable result = operations.find(query(whereFilename().is(fileName)));
        GridFSFile gridFSFile = result.first();
        GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
        //創建gridFsResource,用于獲取流對象
        GridFsResource gridFsResource = new GridFsResource(gridFSFile, gridFSDownloadStream);
        return IOUtils.toByteArray(gridFsResource.getInputStream());
    }
}

加入一個配置類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MongoConfig {
    @Value("${spring.data.mongodb.database}")
    String db;
    @Bean
    public GridFSBucket getGridFSBucket(MongoClient mongoClient){
        MongoDatabase database = mongoClient.getDatabase(db);
        GridFSBucket bucket = GridFSBuckets.create(database);
        return bucket;
    }
}

圖片返回的實體類

?
1
2
3
4
5
6
7
8
9
10
11
12
public class ImageResponse implements Serializable {
    private String imageName;
    public ImageResponse(String imageName) {
        this.imageName = imageName;
    }
    public String getImageName() {
        return imageName;
    }
    public void setImageName(String imageName) {
        this.imageName = imageName;
    }
}

配置文件

?
1
2
3
4
5
spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/gridfs
      database: gridfs

Spring Boot中使用GridFS

什么是GridFS

GirdFS是MongoDB提供的用于持久化存儲文件的模塊

在GridFS存儲文件是將文件分塊存儲,文件會按照256KB的大小分割成多個塊進行存儲,GridFS使用兩個集合 (collection)存儲文件,一個集合是chunks, 用于存儲文件的二進制數據;一個集合是files,用于存儲文件的元數 據信息(文件名稱、塊大小、上傳時間等信息)。

從GridFS中讀取文件要對文件的各各塊進行組裝、合并。

在SpringBoot中使用GridFS

存儲文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Autowired
GridFsTemplate gridFsTemplate;
@Test
public void GridFsTest() throws FileNotFoundException {
   //選擇要存儲的文件
   File file = new File("/Users/xxx/Desktop/xxx.docx");
   InputStream inputStream = new FileInputStream(file);
   //存儲文件并起名稱
   ObjectId objectId = gridFsTemplate.store(inputStream, "面試寶典");
   String id = objectId.toString();
   //獲取到文件的id,可以從數據庫中查找
   System.out.println(id);
}

查找文件

創建GridFSBucket對象

?
1
2
3
4
5
6
7
8
9
10
11
@Configuration
public class MongoConfig {
    @Value("${spring.data.mongodb.database}")
    String db;
    @Bean
    public GridFSBucket getGridFSBucket(MongoClient mongoClient){
        MongoDatabase mongoDatabase = mongoClient.getDatabase(db);
        GridFSBucket bucket = GridFSBuckets.create(mongoDatabase);
        return bucket;
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Autowired
GridFsTemplate gridFsTemplate;
@Autowired
GridFSBucket gridFSBucket;
@Test
public void queryFile() throws IOException {
   String id = "5c1b8fac72884e389ae3df82";
   //根據id查找文件
   GridFSFile gridFSFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id)));
   //打開下載流對象
   GridFSDownloadStream gridFS = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
   //創建gridFsSource,用于獲取流對象
   GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFS);
   //獲取流中的數據
   String string = IOUtils.toString(gridFsResource.getInputStream(), "UTF-8");
   System.out.println(string);
}

刪除文件

?
1
2
3
4
5
6
//刪除文件
@Test
public void testDelFile() throws IOException {
//根據文件id刪除fs.files和fs.chunks中的記錄
       gridFsTemplate.delete(Query.query(Criteria.where("_id").is("5c1b8fac72884e389ae3df82")));
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_44693282/article/details/97916541

延伸 · 閱讀

精彩推薦
1206
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 成人理论片 | 这里只有精品视频在线 | 自拍偷拍亚洲欧美 | 黄色一级片免费播放 | 欧美一区二区三区精品 | 狠狠操综合网 | 亚洲精品久久 | 欧美三级网站 | 欧美日韩精品综合 | 成人h动漫精品一区二区樱花 | 国产精品美女高潮无套久久 | 欧美一区二区三区在线 | 色橹橹欧美在线观看视频高清 | 成人九九视频 | 九九久久九九 | 亚洲一区在线视频 | 国产欧美视频一区二区三区 | 精品一区在线视频 | 黄色影院 | 亚洲欧美日韩另类一区二区 | 国产精品成人在线视频 | 在线观看中文字幕 | 国产97色在线 | 亚洲 | 日韩一区二区三区在线看 | 亚洲精品一 | 国产欧美综合一区二区三区 | 国产欧美中文字幕 | 成人免费小视频 | 国产久| 玖玖爱视频在线 | 日韩第一区 | 精品在线 | 日韩av福利 | 亚洲二区在线观看 | 亚洲亚色 | 新久久久| 欧洲一区二区在线观看 | 欧美第一页 | 99精品久久 | 午夜成人免费电影 | 国产丝袜一区 |