MongoDB 儲存圖片等檔案有兩種方式
(該文章針對的是已經可以使用MONGODB整合Spring的使用者)
1.使用MongoTemplate
/** * 隱藏檔 * @param collectionName 集合名 * @param file 檔案 * @param fileid 檔案id * @param companyid 檔案的公司id * @param filename 檔案名稱 */ public void SaveFile(String collectionName, File file, String fileid, String companyid, String filename) { try { DB db = mongoTemplate.getDb(); // 儲存fs的根節點 GridFS gridFS = new GridFS(db, collectionName); GridFSInputFile gfs = gridFS.createFile(file); gfs.put("aliases", companyid); gfs.put("filename", fileid); gfs.put("contentType", filename.substring(filename.lastIndexOf("."))); gfs.save(); } catch (Exception e) { e.printStackTrace(); System.out.println("隱藏檔時發生錯誤!!!"); } } // 取出檔案 public GridFSDBFile retrieveFileOne(String collectionName, String filename) { try { DB db = mongoTemplate.getDb(); // 擷取fs的根節點 GridFS gridFS = new GridFS(db, collectionName); GridFSDBFile dbfile = gridFS.findOne(filename); if (dbfile != null) { return dbfile; } } catch (Exception e) { // TODO: handle exception } return null; }//抱歉項目案例不能給你,不過這個是向mongodb存取檔案的實現代碼,希望能協助到你。//由GridFSDBFile 可以得到inputStream,這樣你就明白了吧。
2.使用GridFsTemplate
網上找到的第一種方法總結的非常的不好,Spring結合的感覺不夠緊密。 Google了下參考了下網上的文章。
參考文章
Spring 偽配置
<mongo:mongo host="127.0.0.1" port="27017"><mongo:options connections-per-host="200"threads-allowed-to-block-for-connection-multiplier="100"connect-timeout="1000" max-wait-time="1500" auto-connect-retry="true"socket-keep-alive="true" socket-timeout="1500" slave-ok="true"write-number="1" write-timeout="0" write-fsync="true" /></mongo:mongo><mongo:db-factory dbname="***" username="***"password="***" mongo-ref="mongo" /><mongo:mapping-converter id="converter"db-factory-ref="mongoDbFactory" /><!-- 取圖函數 --><bean id="gridFsTemplate" class="org.springframework.data.mongodb.gridfs.GridFsTemplate"><constructor-arg ref="mongoDbFactory" /><constructor-arg ref="converter" /><constructor-arg value="****" index="2" /><!-- 表名 --></bean> <bean id="abstractMongoDB" class="com.***.AbstractMongoDB" abstract="true"> <property name="mongoTemplate"> <ref bean="mongoTemplate" /> </property> <property name="gridFsTemplate"> <ref bean="gridFsTemplate" /> </property> </bean>
Java 虛擬碼
List<GridFSDBFile> files = this.getGridFsTemplate().find(null); //查詢全部,查詢方式和MongoTemplate一樣System.out.println("-----------------"); for (GridFSDBFile file: files) { System.out.println(file); }