1. 程式人生 > >使用mongodb作為小記憶體的圖片伺服器 (含原始碼下載)

使用mongodb作為小記憶體的圖片伺服器 (含原始碼下載)

我們的個別系統裡面會經常遇到一些小型的圖片(小於1.5MB),目前大多數的解決方案是:這些圖片如果放在伺服器的檔案硬盤裡,然後連結放在關係型資料或者類似mongodb的nosql資料庫裡。

但是不得不提出一個問題是。比如學校,政務機關的系統,經常會上傳一些證件照,這些圖片也不大,但是量很多。如果要刪除時候,或者邏輯刪除時候,就會出現一系列的問題。

物理刪除:圖片地址的庫資料刪掉,然後伺服器檔案磁碟上的檔案要刪掉,要執行兩次操作,很繁瑣。大多數的系統是直接刪除地址庫裡的地址,伺服器檔案磁碟上的檔案不刪除。隨著時間推移,伺服器磁碟容量將逐漸被這些無人管的圖片佔光,就類似於那種野指標情況類似(這種情況屬於慢性的。野指標直接佔用RAM資源,或者指向別的地方,可能會造成伺服器癱瘓)

那麼需要一個簡單,成本低廉適合這種小系統的檔案伺服器,mongodb不適用gridfs,直接儲存小型圖片是再好不過了。

我針對這些問題寫了一個小demo,希望能夠達到拋磚引玉的效果,同時demo原始碼免費無限次下載。

controller裡的方法接收檔案形參加上註解

@RequestParam("file") MultipartFile file

檔案的內容,使用二進位制的型別來接收和存放

private Binary content; // 檔案內容

File的實體型別

public File(String name, String contentType, long size, Binary content) {
    	this.name = name;
    	this.contentType = contentType;
    	this.size = size;
    	this.uploadDate = new Date();
    	this.content = content;
    }

controller接收檔案的處理,mongodb是最接近關係型庫的nosql,存放裡將這些小檔案轉換成二進位制資料存放。再對檔案的名稱新增查詢索引,那麼查詢的時候這些小檔案就像查詢一條資料一樣的優雅。更加開心的是還可以運用一些mongodb的新特性來操作這些小檔案。

File f = new File(file.getOriginalFilename(), file.getContentType(), file.getSize(),
                    new Binary(file.getBytes()));

存放和讀取檔案的dao

//存放圖片
mongoTemplate.save(file);


//獲取圖片
log.info(" " );
Query query = new Query();
if(StringUtils.isNotBlank(_id)) {
    query.addCriteria(Criteria.where("_id").is(new ObjectId(_id)));
}
return mongoTemplate.findOne(query, File.class);

controller返回圖片時

 return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; fileName=" + new String(file.getName().getBytes("utf-8"),"ISO-8859-1"))
                .header(HttpHeaders.CONTENT_TYPE, "application/octet-stream")
                .header(HttpHeaders.CONTENT_LENGTH, file.getSize() + "").header("Connection", "close")
                .body(file.getContent().getData());

相關推薦

使用mongodb作為記憶體圖片伺服器 原始碼下載

我們的個別系統裡面會經常遇到一些小型的圖片(小於1.5MB),目前大多數的解決方案是:這些圖片如果放在伺服器的檔案硬盤裡,然後連結放在關係型資料或者類似mongodb的nosql資料庫裡。 但是不得不提出一個問題是。比如學校,政務機關的系統,經常會上傳一些證件照,這些圖片

程式設計師程式設計藝術第二十六章:基於給定的文件生成倒排索引原始碼下載

第二十六章:基於給定的文件生成倒排索引的編碼與實踐作者:July、yansha。出處:結構之法演算法之道引言    本週實現倒排索引。實現過程中,尋找資料,結果發現找份資料諸多不易:1、網上搜倒排索引實現,結果千篇一律,例子都是那幾個同樣的單詞;2、到谷歌學術上想找點稍微有價

MyBatis基於Spring-boot整合通用Mapper以及pagehelper分頁外掛原始碼下載

配置 POM檔案 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-paren

VC使用ADO連線Oracle資料庫詳解原始碼下載

ADO 主要物件介紹     ADO物件包括:連線物件(Connection Object)、命令物件 (Command Object) 、記錄集對象(RecordSet  Object)、欄位物件(Field  Object) 、記錄物件(Record  Object)

實現從oss阿里雲伺服器以附件形式下載檔案批量下載

轉載自:https://blog.csdn.net/sinat_28771747/article/details/53520253 筆者在專案中寫一個從阿里雲伺服器上面以附件形式下載檔案的介面時,遇到了問題,網上搜索無任何相關的解決方案,最後通過通過自己查閱API文件,再結合自己的經驗,實現了下

瞧一瞧!這兒實現了MongoDB的增量備份與還原部署程式碼

一 需求描述 我們知道資料是公司的重要資產,業務的系統化、資訊化就是數字化。資料高效的儲存與查詢是系統完善和優化的方向,而資料庫的穩定性、可靠性是實現的基礎。高可用和RPO(RecoveryPointObjective,復原點目標,指能容忍的最大資料丟失量)是衡量一個數據庫優劣的重要指標。作為一個DBA,搭

瞧一瞧!看一看!這兒實現了MongoDB的增量備份與還原部署程式碼

一 需求描述 我們知道資料是公司的重要資產,業務的系統化、資訊化就是數字化。資料高效的儲存與查詢是系統完善和優化的方向,而資料庫的穩定性、可靠性是實現的基礎。高可用和RPO(RecoveryPointObjective,復原點目標,指能容忍的最大資料丟失量)是衡量一個數據庫優劣的重要指標。作為一個DBA,搭建

FastDFS+Nginx搭建圖片伺服器親測OK

前言 操作環境:CentOS7 X64,以下操作都是單機環境。 我把所有的安裝包下載到/softpackage/下,解壓到當前目錄。 先做一件事,修改hosts,將檔案伺服器的ip與域名對映(單機TrackerServer環境),因為後面很多配置裡面都需要去配置伺服器地址,ip變

Windows下無法使用Nginx作為一個http檔案伺服器許可權問題?

這裡使用的Nginx版本來自於最新的OpenResty。 nginx.conf: server { listen 8000; server_name chenzx alias chenzx.localhost;

win7配置自己的IIS伺服器json訪問

2.配置完後還要在站點(資料夾)新增使用者 IUSR 3.這樣做後只能自己電腦訪問,如果需要外部訪問還需要關閉防火牆 ———————————————————————————————— 如果需要訪問JSON檔案(如date.json) 1、ii

GAN之父在NIPS 2016上做的報告 兩個競爭網路的對抗譯文下載

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JAVA白啟蒙篇:第一個SSM框架搭建示例原始碼下載

  HelloWorld工程原始碼下載 http://download.csdn.net/detail/baidu_31657889/9682606 有償連結(0.1rmb):https://www.fageka.com/Home/Index/sell?id=ctLT7f4

某網Python flask構建微信程式訂餐系統雲盤下載

第1章 《Python Flask構建微信小程式訂餐系統》課程簡介本章內容會帶領大家通覽整體架構,功能模組,及學習建議。讓大家在一個清晰的開發思路下,進行後續的學習。本次課程是嚴格按照商業系統進行架構開發的,從PC管理員端到小程式會員端,從專案搭建到部署上線,通俗易懂

Golang在視訊直播平臺的高效能實踐PPT下載

熊貓 TV 是一家視訊直播平臺,先介紹下我們系統執行的環境,下面這 6 大服務只是我們幾十個服務中的一部分,由於併發量與重要性比較高,所以成為 golang 小試牛刀的首批高效能高併發服務。 把大服務拆細, 然後服務化獨立部署,更容易簡化部署,也容易單點細節優化

常見三維重建演算法及其實現原始碼下載連結

主要整理部分本科畢業設計 這裡三維重建輸入的是斷層影象。 對影象首先需要進行一些常見操作,直方圖均衡化、常見濾波、影象銳化、邊緣提取、二值化等等,把常見操作整合在一個MATLAB GUI中。當初也是從網上下的demo改的,這裡就不要積分了。 網址:http://down

Miniftp專案實戰剖析原始碼連結

ftp關鍵技術一:賬戶驗證 對於Linux端的ftp服務的而言,賬戶即為Linux端的使用者。 一般步驟是: 以root使用者許可權啟動ftp服務 獲取客戶端的驗證資訊 從系統獲取使用者名稱對應的加密後的密碼 對客戶端發過來的密碼進行對應的加密,並對比 如何驗證是

myeclipse 2016 ci3破解教程軟體下載

一、myeclipse簡介:MyEclipse企業級工作平臺(MyEclipseEnterprise Workbench ,簡稱MyEclipse)是對EclipseIDE的擴展,利用它我們可以在資料庫

GAN之父在NIPS 2016上做的報告:兩個競爭網路的對抗譯文下載

GAN之父在NIPS 2016上做的報告:兩個競爭網路的對抗作者:Ian Goodfellow翻譯:七月線上DL翻譯組譯者:範詩劍 汪識瀚 李亞楠審校:管博士 寒小陽 加號責編:翟惠良 July宣告:本譯文僅供學習交流,有任何翻譯不當之處,敬請留言指正。轉載請註明出處。下載:

Zookeeper+websocket實現對分散式伺服器的實時監控原始碼下載

​ 我就是個封面 Zookeeper簡介 Zookeeper是Hadoop的一個子專案,它是分散式系統中的協調系統。 簡單來說就是一個Zookeeper註冊同步中心,內部結構為一個樹形目錄,每個節點上可以存放一定量(預設的資料量上限是1M,但是可以通過調整引數修改)的資料,客戶端(一段通過Zook

Spring boot基於redis實現附近的人原始碼下載

核心原始碼 public class NearbyPO { @NotNull(message = "id值不能為空") private Integer id; @NotBlank(message