springboot集成mongodb,实现文件上传下载

一、linux上安装mongodb

1、下载安装包:https://www.mongodb.com/download-center#atlas,上传包mongodb-linux-x86_64-rhel70-3.6.5.tgz到服务器

2、创建mongodb文件夹,作为安装目标文件夹

  cd /usr/local;mkdir mongodb

3、解压,移动解压缩后的文件夹下的所有文件到mongodb文件夹下

  tar -zxvf mongodb-linux-x86_64-rhel70-3.6.5.tgz;

  cd mongodb-linux-x86_64-rhel70-3.6.5;

  mv * /usr/local/mongodb

4、创建data/db文件夹存放数据,创建logs文件夹存放日志

  cd /usr/local/mongodb;

  mkdir -p data/db;

  mkdir logs;

5、创建配置文件

  cd /usr/local/mongodb/bin;

  vim mongodb.conf

加入以下内容:

dbpath = /usr/local/mongodb/data/db   
logpath = /usr/local/mongodb/logs/mongodb.log  
port = 27017   
fork = true

bind_ip = 192.168.2.182,127.0.0.1 #多个ip的配置方式

6、启动MongoDB服务

  cd /usr/local/mongodb/bin;

  ./mongod -f mongodb.conf #加载配置文件 

7、客户端访问

  ./mongo

  use wx_applet #创建数据库

  show dbs

  可以看到,我们刚创建的数据库不在数据库的列表中, 要显示它,我们需要向数据库插入一些数据

db.wx_applet.insert({"name":"yangfeng"})

二、springboot整合mongodb,实现文件的上传下载

1、pom.xml文件中加入:


2、application.properties中加入:


格式:

spring.data.mongodb.uri=mongodb://username:password@ip:port/database

3、这里以文件上传到mongodb来做简单的示例

package com.jp.tech.applet.ms.file.api;

import com.jp.tech.applet.common.constant.Constant;
import com.jp.tech.applet.common.jwt.JWTClaimGetter;
import com.jp.tech.applet.common.jwt.JWTConstant;
import com.jp.tech.applet.common.jwt.JWTHelper;
import com.jp.tech.applet.common.resource.ResourceUtil;
import com.jp.tech.applet.common.result.ResultModel;
import com.jp.tech.applet.ms.file.domain.JpFileExt;
import com.jp.tech.applet.ms.file.service.IFileService;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSFile;
import io.jsonwebtoken.Claims;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @author yangfeng
 * @create 2018-06-04 12:57
 **/
@Controller
@RequestMapping("/file")
public class FileController {

    private Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @Autowired
    private GridFsTemplate gridFsTemplate;

    /**
     * 文件上传
     * @param request
     * @return
     */
    @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    @ResponseBody
    public ResultModel uploadFile(HttpServletRequest request) {
        try {
            Part part = request.getPart("file");
            // 获得提交的文件名
            String fileName = part.getSubmittedFileName();
            // 获得文件输入流
            InputStream ins = part.getInputStream();
            // 获得文件类型
            String contentType = part.getContentType();
            // 将文件存储到mongodb,mongodb 将会返回这个文件的具体信息
            GridFSFile gridFSFile = gridFsTemplate.store(ins, fileName, contentType);
            JpFileExt jpFile = new JpFileExt();
            jpFile.setContentType(contentType);
            jpFile.setFileName(fileName);
            jpFile.setMongoFileId(gridFSFile.getId().toString());
            return ResultModel.success(jpFile);
        } catch (Exception e) {
            logger.error("上传失败:"+e.getMessage());
            return ResultModel.commonError("上传失败!");
        }
    }

    /**
     * 下载
     * @param fileId 文件id
     * @param response
     * @return
     */
    @RequestMapping(value = "/downloadFile")
    public void downloadFile(@RequestParam(name = "file_id") String fileId, HttpServletResponse response) {
        Query query = Query.query(Criteria.where("_id").is(fileId));
        // 查询单个文件
      GridFSDBFile gfsfile = gridFsTemplate.findOne(query);
      try {
          if(gfsfile==null){
            response.setContentType(Constant.RESPONSE_CONTENT_TYPE);
            response.getWriter().write("文件已经不存在啦!");
          }
        // 通知浏览器进行文件下载
         response.setContentType(gfsfile.getContentType());
        response.setHeader("Content-Disposition", "attachment;filename=" + gfsfile.getFilename());
        gfsfile.writeTo(response.getOutputStream());
    } catch (IOException e) {
        logger.error("下载失败:"+e.getMessage());
    }
} /** * 删除文件 * @param fileId * @return */ @RequestMapping( value = "/deleteFile" , method = RequestMethod. POST) @ResponseBody public ResultModel deleteFile( @RequestParam( name = "file_id") String fileId) { Query query = Query. query(Criteria. where( "_id").is(fileId)) ; // 查询单个文件 GridFSDBFile gfsfile = gridFsTemplate.findOne(query) ; if(gfsfile== null){ return ResultModel. commonError( " 文件不存在! ") ; } try { gridFsTemplate.delete(query) ; } catch ( final Exception e) { logger.error( " 删除失败: "+e.getMessage()) ; return ResultModel. commonError( " 删除失败! ") ; } return ResultModel. success( " 删除成功! ") ; }}


猜你喜欢

转载自blog.csdn.net/xiaoxiangzi520/article/details/80595287