SpringBoot 통합 MongoDB 구현 파일 업로드 다운로드 삭제
8347 단어 SpringBootMongoDB업로드다운로드 하 다.
MongoDB 기초 조작 명령 예시 연습
만 든 데이터베이스 이름:horse,만 든 집합 이름:blog
#
use horse
# [horse]
db.dropDatebase()
#
show dbs
#
db.createUser({user:"horse",pwd:"mongo123",roles:[{role:"readWrite",db:"horse"}]})
#
db.createCollection("blog")
#
db.blog.drop()
# [horse]
show collections
#
db.blog.insert({"name":"Tom","age":23,"sex":true})
db.blog.insertOne({"name":"Top","age":20,"sex":true})
db.blog.insertMany([{"name":"Jerry","age":22,"sex":false},{"name":"Free","age":21,"sex":true}])
#
db.blog.update({"name":"Top"},{$set:{"name":"TopSun"}},{multi:true})
#
db.blog.remove({"sex":false}, true)
db.blog.deleteMany({"age":23})
db.blog.deleteOne({"age":22})
#
db.blog.deleteMan({})
#
db.blog.find().pretty() # ( , )
db.blog.findOne({"name":"Tom"}) #
db.blog.find({"age":{$lt: 23},"name":"Free"}).pretty() # and
db.blog.find({$or:[{"age":{$lt:23}},{"name":"Free"}]}).pretty() # or
db.blog.find({"age":{$lt:23},$or:[{"name":"Free"},{"sex":"false"}]}).pretty() # and or
db.blog.find().limit(2).skip(1).sort({"age":1}).pretty() # limit、skip、sort ( :sort-> skip ->limit)
# ( )
db.blog.aggregate([{$group:{_id:"$age",count:{$sum:1}}}])
2.GridFsTemplate 사용2.1 pom 의존 도입
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.2 설정 yml
spring:
data:
mongodb:
host: *.*.*.*
username: ***
password: ***
database: ***
port: 27017
#
servlet:
multipart:
max-file-size: 10MB
max-request-size: 50MB
2.3 업로드 다운로드 삭제질풍 에 직면 하 라:HuTool 공구 꾸러미 를 연결 하여 먹 는 것 이 더 좋다!!!
/**
* @author Mr.Horse
* @version 1.0
* @description: MongoDB 、 、 ( HuTool )
* @date 2021/4/29 9:53
*/
@Validated
@Controller
@RequestMapping("/mongo")
public class MongoUploadController {
private static Logger logger = LoggerFactory.getLogger(MongoUploadController.class);
@Autowired
private GridFsTemplate gridFsTemplate;
@Autowired
private MongoTemplate mongoTemplate;
private static final List<String> CONTENT_TYPES = Arrays.asList("image/gif", "image/jpeg", "image/jpg", "image/png");
/**
* MongoDB ( )
*
* @param file
* @return
*/
@PostMapping("/upload")
public ResponseEntity<String> fileUpload(@RequestParam("file") MultipartFile file) {
try {
// ( , )
String originalFilename = file.getOriginalFilename();
if (StrUtil.isBlank(originalFilename)) {
return ResponseEntity.badRequest().body(" ");
}
String contentType = file.getContentType();
if (!CONTENT_TYPES.contains(contentType)) {
return ResponseEntity.badRequest().body(" ");
}
InputStream inputStream = file.getInputStream();
BufferedImage bufferedImage = ImageIO.read(inputStream);
if (ObjectUtil.isEmpty(bufferedImage)) {
return ResponseEntity.badRequest().body(" ");
}
//
String suffix = FileNameUtil.getSuffix(originalFilename);
String fileName = IdUtil.simpleUUID().concat(".").concat(suffix);
// , ObjectId
ObjectId objectId = gridFsTemplate.store(inputStream, fileName, contentType);
return StrUtil.isBlank(String.valueOf(objectId)) ? ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(" ") : ResponseEntity.ok(String.valueOf(objectId));
} catch (IOException e) {
return ResponseEntity.badRequest().body(" ");
}
}
/**
* ObjectId , ,
*
* @param objectId
*/
@GetMapping("/read")
public void queryFileByObjectId(@RequestParam("objectId") @NotBlank(message = "ObjectId ") String objectId, HttpServletResponse response) {
// objectId
GridFSFile file = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(objectId)));
//
GridFSBucket gridFsBucket = GridFSBuckets.create(mongoTemplate.getDb());
InputStream inputStream = null;
OutputStream outputStream = null;
try {
if (ObjectUtil.isNotNull(file)) {
//
GridFSDownloadStream fileStream = gridFsBucket.openDownloadStream(file.getObjectId());
// girdFsResource, ,
GridFsResource gridFsResource = new GridFsResource(file, fileStream);
//
inputStream = gridFsResource.getInputStream();
outputStream = response.getOutputStream();
byte[] bytes = new byte[1024];
if (inputStream.read(bytes) != -1) {
outputStream.write(bytes);
}
}
} catch (IOException e) {
logger.error(" : {}", e.getMessage());
} finally {
IoUtil.close(outputStream);
IoUtil.close(inputStream);
}
}
/**
* ObjectId
*
* @param objectId
* @return
*/
@DeleteMapping("/remove")
public ResponseEntity<String> removeFileByObjectId(@RequestParam("objectId") @NotBlank(message = "ObjectId ") String objectId) {
gridFsTemplate.delete(new Query(Criteria.where("_id").is(objectId)));
return ResponseEntity.ok(" ");
}
}
브 라 우 저 페이지 에서 이 자원 을 다운로드 하 는 기능 이 필요 하 다 면 js 와 결합 하여 작업 할 수 있 습 니 다(파일 형식 은 구체 적 인 업무 수요 에 따라 정 합 니 다).주요 구현 코드 는 다음 과 같다.
downloadNotes(noteId) {
axios({
url: this.BASE_API + '/admin/mongo/file/query/' + noteId,
method: 'get',
responseType: 'arraybuffer',
params: { type: 'download' }
}).then(res => {
// type , pdf
const pdfUrl = window.URL.createObjectURL(new Blob([res.data], { type: `application/pdf` }))
const fname = noteId //
const link = document.createElement('a')
link.href = pdfUrl
link.setAttribute('download', fname)
document.body.appendChild(link)
link.click()
URL.revokeObjectURL(pdfUrl) // URL
})
}
이상 은 SpringBoot 가 MongoDB 를 통합 하여 파일 업로드 와 다운로드 삭제 에 관 한 상세 한 내용 입 니 다.SpringBoot 통합 MongoDB 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.