java+MongoDB實(shí)現(xiàn)存圖片、下載圖片的方法示例
本文實(shí)例講述了java+MongoDB實(shí)現(xiàn)存圖片、下載圖片的方法。分享給大家供大家參考,具體如下:
1.存圖片
demo:將某個(gè)文件存到mongoDB,這個(gè)file可以通過前臺(tái)參數(shù)傳入,我這里直接將D://test.png存到mongoDB
@RequestMapping("/addFile")
@ResponseBody
public String addFile(){
MongoClient client = new MongoClient("127.0.0.1",27017);
DB db = client.getDB("files");
GridFS fs = new GridFS(db);
try {
GridFSInputFile gridFSInputFile = fs.createFile(new File("D://test.png"));
gridFSInputFile.setFilename("db_test.png");
gridFSInputFile.save();
} catch (IOException e) {
e.printStackTrace();
}
return "file over";
}
執(zhí)行后,可看到圖片已經(jīng)存入成功:

2.下載圖片
需要指定圖片id,可從前端參數(shù)傳入,我這里寫死(上一步存圖片,對(duì)應(yīng)了一個(gè)mongoDB中的files_id):
@RequestMapping("/downFile")
public void downFile(HttpServletResponse response){
String fileId = "5c0f7c374fc404123403d69e";//這里可以通過參數(shù)取代
try {
MongoClient client = new MongoClient("127.0.0.1",27017);
DB db = client.getDB("files");
GridFS fs = new GridFS(db);
GridFSDBFile gridFSDBFile = fs.findOne(new ObjectId(fileId));
OutputStream sos = response.getOutputStream();
response.setContentType("application/octet-stream");
// 獲取原文件名
String name = (String) gridFSDBFile.get("filename");
String fileName = new String(name.getBytes("GBK"), "ISO8859-1");
// 設(shè)置下載文件名
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 向客戶端輸出文件
gridFSDBFile.writeTo(sos);
sos.flush();
sos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java圖片操作技巧匯總》、《java日期與時(shí)間操作技巧匯總》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》及《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》。
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Servlet實(shí)現(xiàn)統(tǒng)計(jì)頁面訪問次數(shù)功能
這篇文章主要介紹了Servlet實(shí)現(xiàn)統(tǒng)計(jì)頁面訪問次數(shù)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
bool當(dāng)成函數(shù)參數(shù)錯(cuò)誤理解
經(jīng)常會(huì)在函數(shù)的參數(shù)里使用bool參數(shù),這會(huì)大大地降低代碼的可讀性2012-11-11
Spring Core動(dòng)態(tài)代理的實(shí)現(xiàn)代碼
通過JDK的Proxy方式或者CGLIB方式生成代理對(duì)象的時(shí)候,相關(guān)的攔截器已經(jīng)配置到代理對(duì)象中去了,接下來通過本文給大家介紹Spring Core動(dòng)態(tài)代理的相關(guān)知識(shí),需要的朋友可以參考下2021-10-10
Java使用ArrayList實(shí)現(xiàn)撲克牌的示例代碼
學(xué)習(xí)了關(guān)于集合類的知識(shí),我們可以做一個(gè)小項(xiàng)目來加深對(duì)集合類知識(shí)的學(xué)習(xí)!本文就來利用ArrayList實(shí)現(xiàn)撲克牌發(fā)牌洗牌效果,需要的可以參考一下2022-10-10
springboot熱部署class XX cannot be cast&nbs
在使用DevTools進(jìn)行熱加載時(shí)遇到的`classXXcannotbecasttoclassXX`錯(cuò)誤,以及解決該問題的方法,通過在`resources`目錄下創(chuàng)建`META-INF/spring-devtools.properties`文件,并添加相應(yīng)的配置,可以有效解決此問題,使DevTools熱加載功能得以正常工作2025-02-02
java 分轉(zhuǎn)元與元轉(zhuǎn)分實(shí)現(xiàn)操作
這篇文章主要介紹了java 分轉(zhuǎn)元與元轉(zhuǎn)分實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02

