文档章节

文件上传(Springcloud与mongo集合)

0了凡0
 0了凡0
发布于 2016/09/08 08:54
字数 895
阅读 121
收藏 2

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中的展现

 

© 著作权归作者所有

0了凡0
粉丝 4
博文 78
码字总数 29030
作品 0
昌平
私信 提问
SpringCloud--鸿鹄Cloud分布式微服务云系统

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

itcloud
2018/07/25
1K
0
Spring Cloud-honghu Cloud分布式微服务云系统

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

itcloud
2018/04/25
564
0
SpringCloud学习系列之四-----配置中心(Config)使用详解

前言 本篇主要介绍的是SpringCloud中的分布式配置中心(SpringCloud Config)的相关使用教程。 SpringCloud Config Config 介绍 Spring Cloud Config项目是一个解决分布式系统的配置管理方案。...

虚无境
06/01
157
0
Spring Cloud-Honghu Cloud分布式微服务云系统(一)

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

明理萝
2018/09/07
242
1
跟上时代学Springcloud之介绍(1)

1、概念 Springboot是一个快速开发框架,那Springcloud就是多个springboot框架的有序集合,基本和dubbo的功能差不多。 2、版本号 每一个Springcloud的版本号都对应一个Springboot的版本,至关...

木九天
2018/12/29
297
0

没有更多内容

加载失败,请刷新页面

加载更多

Echars鼠标点击事件多次触发

本文转载于:专业的前端网站➭Echars鼠标点击事件多次触发 gChart.on('click', function (params) { if (params.componentSubType == "bar" && params.componentType == "serie......

前端老手
刚刚
0
0
springboot2.0.6(附) 解析META-INF/spring.factories通过系统加载类获取对应的 class 的全限定名称

在 SpringBoot中是通过getSpringFactoriesInstances(Class<T> type)方法获取所有classpath下面的META-INF/spring.factories文件,然后根据type值找到对应的 class 的全限定名称列表。下面我来...

小亮89
1分钟前
0
0
zk工厂方法实现NIOServerCnxnFactory

NIOServerCnxnFactory类 内部类 AbstractSelectThread AcceptThread SelectorThread 属性 ZOOKEEPER_NIO_SESSIONLESS_CNXN_TIMEOUT 10s session过期时间 ZOOKEEPER_NIO_NUM_SELECTOR_THREADS......

writeademo
4分钟前
0
0
天猫精灵业务如何使用机器学习PAI进行模型推理优化

作者:如切,悟双,楚哲,晓祥,旭林 引言 天猫精灵(TmallGenie)是阿里巴巴人工智能实验室(Alibaba A.I.Labs)于2017年7月5日发布的AI智能语音终端设备。天猫精灵目前是全球销量第三、中国...

阿里云官方博客
12分钟前
1
0
BJL技巧之大路馆擦法—《利辰逸》

很多朋友刚玩百佳时间不长,不知道如何看路,今 天我就来简单的讲下看大路的方法。 都是前辈教的,这里我只是简单复述一下。 大路的观察方法有以下几种: 先从庄闲的数量变化说起。 庄闲的强...

那女孩对我说
13分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部