项目预览网址 : http://trans.waibaobao.cn/file/pics

安装:前提安装mongodb 作为文件储存库

1)nginx-gridfs安装

a、安装所用依赖包 yum -y install pcre-devel openssl-devel zlib-devel git gcc gcc-c++

b、下载nginx-gridfs 源代码 git clone https://github.com/mdirolf/nginx-gridfs.git(前提安装git)

进入nginx-gridfs 后

git checkout v0.8

git branch

git submodule init

git submodule update

2)a、nginx 下载安装 
wget http://nginx.org/download/nginx-1.14.2.tar.gz      解压 tar -zxvf nginx-1.14.2.tar.gz

b、进入nginx-1.14.2后
./configure --prefix=/usr/local/nginx   --with-openssl=/usr/include/openssl --add-module=../nginx-mongodb/nginx-gridf

c、make -j8 && make install -j8 (此时会多个nginx目录)

我的报错了

d、vi objs/Makefile  把第3行的-Werror错误去后  make -j8 && make install -j8

e、进入nginx的配置文件更改

    server {
listen 10010;
server_name localhost; location /pics/ {
gridfs zrdb
field=filename
type=string;
mongo 127.0.0.1:27017;
} }

test 代表mongodb 数据库名

pics 为配置java 访问mongodb的访问路径

mongodb.url=http://47.106.32.125/pics/
ivs.mongodb.host=47.106.32.125
ivs.mongodb.port=27017
ivs.mongodb.database=test

ok!!!

下面说下java 怎么实现连接mongodb 数据库

话不多说上代码:

1)配置类 加载mongodb dev 的配置文件

package com.fyun.tewebcore.config;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.mongodb.MongoClientOptions;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; import java.io.IOException; @Component
@PropertySource("classpath:/config/mongodb-${spring.profiles.active:dev}.properties")
@Configuration
public class MongoConfig extends JsonSerializer<String> {
public static String mongodbUrl; public static String urlKey = "mongodbUrl"; @Override
public void serialize(String String, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
if (StringUtils.isNotEmpty(String))
jsonGenerator.writeString(mongodbUrl + String);
else
jsonGenerator.writeString(" ");
} @Value("${mongodb.url}")
public void setMongodbUrl(String mongodbUrl) {
MongoConfig.mongodbUrl = mongodbUrl;
} @Bean
public MongoClientOptions mongoOptions(){
return MongoClientOptions.builder().maxConnectionIdleTime(3000).build();
}
}

2)写一个文件上传controller

package com.fyun.tewebcore.Controller.file;
import com.fyun.common.model.base.CommonResponse;
import com.fyun.common.model.base.SystemCode;
import com.fyun.common.utils.file.MongoGridfsServiceImpl;
import com.fyun.common.utils.util.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
* @author zhourui
* @create 2019/12/31
*/
@Api("文件上传处理器")
@RestController
@RequestMapping("/file")
public class FileController {
private static final Logger logger= LoggerFactory.getLogger(FileController.class);
@Autowired
private MongoGridfsServiceImpl mongoGridfsService;
@ApiOperation(value = "文件上传")
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public CommonResponse upload(@RequestParam(value = "file",required = false) MultipartFile commonsMultipartFile, HttpServletResponse responses) {
responses.addHeader("Access-Control-Allow-Origin", "*");
CommonResponse response = new CommonResponse();
logger.info("#commonsMultipartFile==getOriginalFilename入参" +commonsMultipartFile.getOriginalFilename());
logger.info("#commonsMultipartFile==入参" +commonsMultipartFile);
logger.info("#commonsMultipartFile入参" +commonsMultipartFile.getContentType());
try {
String fileName = StringUtils.getFileName(commonsMultipartFile.getOriginalFilename().substring(commonsMultipartFile.getOriginalFilename().lastIndexOf(".")));
logger.info("#文件名称=="+fileName);
mongoGridfsService.save(commonsMultipartFile.getInputStream(),fileName);
response.setCode(SystemCode.SYSTEM_SUCCESS.getCode());
response.setMessage(SystemCode.SYSTEM_SUCCESS.getMessage());
response.setData(fileName);
return response;
} catch (Exception e) {
logger.error("未知异常");
response.setCode(SystemCode.FILE_UPLOAD_EXCEPTION.getCode());
response.setMessage(SystemCode.FILE_UPLOAD_EXCEPTION.getMessage()+e.getMessage());
return response;
}
}
}

3)调服务接口对gridfs实现增删改查

package com.fyun.common.utils.file;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service; import javax.annotation.PostConstruct;
import java.io.*;
import java.util.List; /**
* Created by 78729 on 2017/7/7.
*/
@Service
@PropertySource("classpath:/config/mongodb-${spring.profiles.active:dev}.properties")
public class MongoGridfsServiceImpl { private static Logger logger = Logger.getLogger(MongoGridfsServiceImpl.class);
private GridFS gridFS;
private MongoClient mongoClient;
@Value("${ivs.mongodb.host}")
private String mongoDBServerUrl = "localhost";
@Value("${ivs.mongodb.port}")
private String portStr;
private int port = 27017;
@Value("${ivs.mongodb.database}")
private String dataBase; public void setMongoDBServerUrl(String mongoDBServerUrl) {
this.mongoDBServerUrl = mongoDBServerUrl;
} public void setPort(int port) {
this.port = port;
} public void setDataBase(String dataBase) {
this.dataBase = dataBase;
} @PostConstruct
public void init() {
try {
mongoClient = new MongoClient(mongoDBServerUrl, port);
DB db = mongoClient.getDB(dataBase);
gridFS = new GridFS(db);
} catch (Exception e) {
logger.error("mongoClient:UnknownHostException", e);
}
} public void saveById(InputStream in, String id) {
GridFSDBFile gridFSDBFile = getById(id);
if (gridFSDBFile != null) {
logger.error(String.format("%s,文件已经存在", gridFSDBFile.getFilename()));
return;
} GridFSInputFile gridFSInputFile = gridFS.createFile(in);
gridFSInputFile.setId(id);
gridFSInputFile.save();
} public void save(String filePath, String fileName) {
GridFSDBFile gridFSDBFile = getByFileName(fileName);
if (gridFSDBFile != null) {
logger.error(String.format("%s,文件已经存在", gridFSDBFile.getFilename()));
return;
}
try {
FileInputStream in = new FileInputStream(new File(filePath));
byte[] buffer = new byte[in.available()];
InputStream input = new ByteArrayInputStream(buffer); GridFSInputFile gridFSInputFile = gridFS.createFile(input, fileName);
gridFSInputFile.setFilename(fileName);
gridFSInputFile.save();
} catch (Exception e) {
logger.error(String.format("文件:%s,未找到", filePath), e);
}
} public void save(InputStream in, String fileName) {
GridFSDBFile gridFSDBFile = getByFileName(fileName);
if (gridFSDBFile != null) {
logger.error(String.format("%s,文件已经存在", gridFSDBFile.getFilename()));
return;
} GridFSInputFile gridFSInputFile = gridFS.createFile(in, fileName);
gridFSInputFile.setFilename(fileName);
gridFSInputFile.save();
} public void save(byte[] in, String saveFileName) {
GridFSDBFile gridFSDBFile = getByFileName(saveFileName);
if (gridFSDBFile != null) {
logger.error(String.format("%s,文件已经存在", gridFSDBFile.getFilename()));
return;
}
try {
InputStream input = new ByteArrayInputStream(in);
GridFSInputFile gridFSInputFile = gridFS.createFile(input, saveFileName);
gridFSInputFile.setFilename(saveFileName);
gridFSInputFile.save();
} catch (Exception e) {
logger.error(String.format("文件:%s,未找到", saveFileName), e);
}
} public void save(InputStream in, String fileName, boolean replace) {
GridFSDBFile gridFSDBFile = getByFileName(fileName);
if ((gridFSDBFile != null) && (replace)) {
this.gridFS.remove(fileName);
}
GridFSInputFile gridFSInputFile = gridFS.createFile(in, fileName);
gridFSInputFile.setFilename(fileName);
gridFSInputFile.save();
} public GridFSDBFile getById(String id, String outFilePath) {
DBObject query = new BasicDBObject("_id", id);
GridFSDBFile gridFSDBFile = gridFS.findOne(query);
if ((gridFSDBFile != null) && (StringUtils.isNotEmpty(outFilePath))) {
writeToFile(gridFSDBFile, outFilePath);
}
return gridFSDBFile;
} public GridFSDBFile getById(String id) {
DBObject query = new BasicDBObject("_id", id);
return gridFS.findOne(query);
} /**
* 根据id查询文件并通过流的方式返回,
*
* @param id 文件ID
* @return
*/ public InputStream getStreamById(String id) {
DBObject query = new BasicDBObject("_id", id);
GridFSDBFile gridFSDBFile = gridFS.findOne(query);
return gridFSDBFile.getInputStream();
} public GridFSDBFile getByFileName(String fileName) {
DBObject query = new BasicDBObject("filename", fileName);
return gridFS.findOne(query);
} public GridFSDBFile getByFileName(String fileName, String outFilePath) {
DBObject query = new BasicDBObject("filename", fileName);
GridFSDBFile gridFSDBFile = gridFS.findOne(query);
if ((gridFSDBFile != null) && (StringUtils.isNotEmpty(outFilePath))) {
writeToFile(gridFSDBFile, outFilePath);
}
return gridFSDBFile;
} public List<GridFSDBFile> getListByFileName(String fileName) {
DBObject query = new BasicDBObject("filename", fileName);
List gridFSDBFileList = gridFS.find(query);
return gridFSDBFileList;
} public void removeById(String id) {
DBObject remove = new BasicDBObject("_id", id);
gridFS.remove(remove);
} public void removeByFileName(String fileName) {
gridFS.remove(fileName);
} private void writeToFile(GridFSDBFile gridFSDBFile, String outFilePath) {
try {
gridFSDBFile.writeTo(outFilePath);
} catch (IOException e) {
logger.error(String.format("%s,文件输出异常", gridFSDBFile.getFilename()), e);
}
} }

wget http://nginx.org/download/nginx-1.14.2.tar.gz

gridfs + nginx + mongodb 实现图片服务器的更多相关文章

  1. FastDFS 与 Nginx 实现分布式图片服务器

    FastDFS 与 Nginx 实现分布式图片服务器 本人的 Ubuntu18.04 用户名为 jj 点我下载所有所需的压缩包文件 一.FastDFS安装 1.安装 fastdfs 依赖包 ① 解压 ...

  2. nginx+ftp搭建图片服务器(Windows Server服务器环境下)

    几种图片服务器的对比 1.直接使用ftp服务器,访问图片路径为 ftp://账户:密码@192.168.0.106/31275-105.jpg 不采用这种方式,不安全容易暴露ftp账户信息 2.直接使 ...

  3. 转:Linux下使用Nginx搭建简单图片服务器

    最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的,今天再这里简单讲一下Nginx实现上传图片以及图片服务器的大致理念. 如果是个人项目或者企业小项目,仅 ...

  4. Nginx发布静态图片服务器

    vir-hosts.conf内容 server { listen ; server_name _; location ~ .*\.(gif|jpg|jpeg|png)$ { expires 24h; ...

  5. windows版nginx+ftp实现图片服务器的搭建

    配置图片服务器的一部分参数 resource.properties: #FTP\u76f8\u5173\u914d\u7f6e #FTP\u7684ip\u5730\u5740 FTP_ADDRESS ...

  6. Nginx+Nodejs搭建图片服务器

    图片上传请求由Node处理,图片访问请求由Nginx处理. 1.Nginx配置 #user nobody; worker_processes 1; #error_log logs/error.log; ...

  7. Centos7 下nginx 搭建文件图片服务器

    现在服务器部署nginx yum install -y epel-release yum install nginx -y 安装完成之后 访问ip 由此可见nginx服务是可用的 修改nginx的配置 ...

  8. Windows Server2012 r2 nginx反向代理图片服务器

    1.下载nginx  http://nginx.org/en/download.html,本人下载的1.18.0版本 2.下载 Windows Service Wrapper(winsw.exe) v ...

  9. Nginx+vsftpd搭建图片服务器

    安装Nginx 参考:http://www.cnblogs.com/idefav2010/p/nginx-concat.html Nginx配置文件 location ~ .*\.(gif|jpg|j ...

  10. centos6.5安装配置fastdfs+nginx实现分布式图片服务器

    一.准备 yum groupinstall -y "Development Tools"yum install -y wget libevent-devel pcre-devel ...

随机推荐

  1. 学习js的一些笔记

    1,对变量的一些认识 在学习java的过程中,我对变量的理解,其实就是一个在运行期进行简单储存的数据的内存空间,运行期结束后就会在各个代码的垃圾回收机制中在内存空间中消除. 对于变量,在java中,一 ...

  2. JDBC的一些基础认识,写的不是特别完善,希望大家看的时候别太介意嘿嘿嘿

    JDBC 1,概念和本质 Java DataBase Connectivity Java 数据库链接, Java语言操作数据库 JDBC的本质:是一套操作所有关系型数据库的规则(接口)而JDBC所有的 ...

  3. 一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup

    摘要: RSGroup是集群隔离方案. 本文分享自华为云社区<华为FusionInsight MRS HBase的集群隔离--RSGroup>,作者: MissAverage. 一.HBa ...

  4. java入门与进阶-P1.1+P1.2

    计算机与编程语言 计算机如何解决问题 !-- 首先计算机他是不知道自己需要去做什么的,它需要按照你所说的步骤一步一步进行直到结束 "请给我一杯水" 1.转身走到厨房; 2.找到一个 ...

  5. MyBatis-Plus生成的id传给前端最后两位变为0

    问题描述: 使用MybatisPlus-Plus插入一条数据,生成的id长这样 1621328019543105539 但是在前端显示的时候id却是这样 1621328019543105500 所以导 ...

  6. JavaScript 评测代码运行速度

    一.使用 performance.now() API 在 JavaScript 中,可以使用 performance.now() API 来评测代码的运行速度.该 API 返回当前页面的高精度时间戳, ...

  7. Fiddler抓手机APP包

    *手机和电脑连接在同一wifi下 *fiddler设置 *启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开"Fiddler Options&qu ...

  8. 《Terraform 101 从入门到实践》 第五章 HCL语法

    <Terraform 101 从入门到实践>这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看. 介绍了Terraform一些 ...

  9. 翻译《threejsfundamentals》离屏渲染+web-worker一篇

    Three.js OffscreenCanvas    OffscreenCanvas是一种相对较新的浏览器功能,目前仅在Chrome中可用,但显然也即将适用于其他浏览器. OffscreenCanv ...

  10. SpringBoot+Vue前后端分离项目,在过滤器取值为Null

    SpringBoot+Vue前后端分离项目,在过滤器取值为Null 是因为SessionID的问题,因为axios每次的请求都是一次新的sessionId,所以只需要在main.js下配置如下 axi ...