1、依赖mongo的jar包

        <!-- mongodb依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

2、配置mongo的数据库连接以及文件大小

---  
spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/origami
  http:
    multipart:
      max-file-size: 500Mb
      max-request-size: 500Mb

  datasource:
    name: mydb
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://127.0.0.1:3306/origamidb?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driverClassName: com.mysql.jdbc.Driver
    minIdle: 5
    maxActive: 10
    initialSize: 1
    timeBetweenEvictionRunsMillis: 3000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
  rabbitmq:
    host: localhost
    port: 5672
    username: zhb
    password: zhb
    virtual-host: cloud-zhb

mybatis:
  #此配置配合xmlUserMapper的使用
  mapperLocations: classpath:/mappers/*.xml
  typeAliasesPackage: com.love.origami.model
eureka:
  instance:
    preferIpAddress: true
    metadata-map:
      cluster: MAIN
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
      hystrix.command.default:
hystrix.command.default:
  execution.isolation.thread.timeoutInMilliseconds: 10000

3、引入mongoDB的MongoTemplate和文件上传的的VO

MongoDB.java

package com.love.origami.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

@Component
public class MongoDB {
    private final MongoTemplate mongoTemplate;
    @Autowired
    public MongoDB(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }
    public MongoTemplate getMongoTemplate() {
        return mongoTemplate;
    }
}
 

FilesVO.java

package com.love.origami.common;

import org.springframework.web.multipart.MultipartFile;

public class FilesVO {
    private String _id;
    private MultipartFile file;
    private String filename;
    private String whose;
    public String get_id() {
        return _id;
    }
    public void set_id(String _id) {
        this._id = _id;
    }
    public MultipartFile getFile() {
        return file;
    }
    public void setFile(MultipartFile file) {
        this.file = file;
    }
    public String getWhose() {
        return whose;
    }
    public void setWhose(String whose) {
        this.whose = whose;
    }
    public String getFilename() {
        return filename;
    }
    public void setFilename(String filename) {
        this.filename = filename;
    }
}
 

4、书写controller与service服务

 

FileService.java

package com.love.origami.service;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.love.origami.common.FilesVO;
import com.love.origami.common.MongoDB;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBObject;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;

@Service
public class FileService {
    @Resource
    private MongoDB mongoDB;
    public static final Logger logger=LoggerFactory.getLogger(FileService.class);

    public String savefile(FilesVO file,HttpServletRequest request){
        logger.info("保存文件开始");
        /**
         * 首先将文件缓存到服务器上
         */
        MultipartFile file3 = file.getFile();
        String fileName = file3.getOriginalFilename();
        String realPath = request.getSession().getServletContext()
        .getRealPath(fileName);
        File file2=new File(realPath);
        try {
            file3.transferTo(file2);
        } catch (IllegalStateException | IOException e1) {
            logger.info("文件保存时发生异常"+e1);
            return "error";
        }
        /**
         * 然后将文件存如mongoDB
         */
        MongoTemplate mongoTemplate = mongoDB.getMongoTemplate();
        DB db = mongoTemplate.getDb();
        GridFS gf=new GridFS(db,"files");
        try {
            GridFSInputFile gfs = gf.createFile(file2);
            gfs.put("_id", UUID.randomUUID().toString().replace("-", ""));  
            gfs.put("whose", file.getWhose());  
            gfs.save();  
        } catch (IOException e) {
            logger.warn("保存文件时出现异常"+e);
            logger.info("保存文件结束");
            return "error";
        }
        /**
         * 删除缓存的文件
         */
        if (file2.isFile()) {
            file2.delete();
        }
        logger.info("保存文件结束");
        return "success";
    }
    public void getFile(String id,OutputStream out,HttpServletResponse response) throws UnsupportedEncodingException{
        MongoTemplate mongoTemplate = mongoDB.getMongoTemplate();
        DB db = mongoTemplate.getDb();
        GridFS gf=new GridFS(db,"files");
        DBObject query  = new BasicDBObject("_id", id);
        GridFSDBFile file = gf.findOne(query);
        String filename = file.getFilename();
        response.setHeader("Content-disposition",
                String.format("attachment; filename=\"%s\"", new String(filename.getBytes("UTF-8"),"ISO-8859-1")));
        long length = file.getLength();
        response.setHeader("Content-Length", String.valueOf(length));
        try {
            file.writeTo(out);
        } catch (IOException e) {
            logger.warn("下载停止");
        }
    }
    public List<FilesVO> searchAll(){
        MongoTemplate mongoTemplate = mongoDB.getMongoTemplate();
        DB db = mongoTemplate.getDb();
        GridFS gf=new GridFS(db,"files");
        List<GridFSDBFile> list = gf.find(new BasicDBObject());
        List<FilesVO> list2=new ArrayList<FilesVO>();
        for (GridFSDBFile gridFSDBFile : list) {
            FilesVO file=new FilesVO();
            file.set_id(gridFSDBFile.getId().toString());
            file.setFilename(gridFSDBFile.getFilename());
            file.setWhose(gridFSDBFile.get("whose").toString());
            list2.add(file);
        }
        return list2;
    }
    public boolean deleteFile(String id){
        MongoTemplate mongoTemplate = mongoDB.getMongoTemplate();
        DB db = mongoTemplate.getDb();
        GridFS gf=new GridFS(db,"files");
        gf.remove(new BasicDBObject("_id", id));
        return true;
    }
}
 

 

FileController.java

package com.love.origami.controller;

import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSON;
import com.love.origami.common.FilesVO;
import com.love.origami.service.FileService;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping("/origami")
@Api(value="filedomain",description="文件处理领域服务接口")
public class FileController {
    @Resource
    private FileService fileService;

    @ApiOperation(value="文件上传",notes="文件上传接口")
    @RequestMapping(value="/files",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
    public String savefile(@RequestParam("whose") String whose,@RequestParam("file") MultipartFile file,HttpServletRequest request){
        FilesVO filesVO=new FilesVO();
        filesVO.setFile(file);
        filesVO.setWhose(whose);
        String result = fileService.savefile(filesVO,request);
        return JSON.toJSONString(result);
    }
    @ApiOperation(value="文件下载",notes="文件下载接口")
    @RequestMapping(value="/files/{id}",method=RequestMethod.GET,produces="application/json;charset=UTF-8")
    public ModelAndView getfile(@PathVariable("id") String id,HttpServletResponse response){
        response.setCharacterEncoding("UTF-8");
        response.setContentType("multipart/form-data");
        try {
            ServletOutputStream out = response.getOutputStream();
            fileService.getFile(id, out,response);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ModelAndView();
    }
    @ApiOperation(value="文件基本信息查看",notes="文件基本信息查看接口")
    @RequestMapping(value="/files",method=RequestMethod.GET,produces="application/json;charset=UTF-8")
    public List<FilesVO> searchFile(){
        List<FilesVO> list = fileService.searchAll();
        return list;
    }
    @ApiOperation(value="文件删除",notes="文件删除接口")
    @RequestMapping(value="/files/{id}",method=RequestMethod.DELETE,produces="application/json;charset=UTF-8")
    public String deleteFile(@PathVariable("id") String id){
        boolean result = fileService.deleteFile(id);
        return  JSON.toJSONString(result);
    }
}
 

5、文件上传、下载、查看和删除在swagger中的展现

文件上传(Springcloud与mongo集合)

 

文件上传(Springcloud与mongo集合)

转载于:https://my.oschina.net/Seaside20151225/blog/744017

相关文章:

  • 2022-12-23
  • 2021-08-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-13
  • 2021-11-30
  • 2021-11-26
猜你喜欢
  • 2021-09-28
  • 2021-10-29
  • 2022-12-23
  • 2021-11-20
  • 2021-11-08
  • 2021-04-13
  • 2021-12-18
相关资源
相似解决方案