文件上传(Springcloud与mongo集合)
2016-09-08 00:00
330 查看
摘要: 文件上传(Springcloud与mongo集合)
1、依赖mongo的jar包
2、配置mongo的数据库连接以及文件大小
3、引入mongoDB的MongoTemplate和文件上传的的VO
MongoDB.java
FilesVO.java
4、书写controller与service服务
FileService.java
FileController.java
5、文件上传、下载、查看和删除在swagger中的展现
1、依赖mongo的jar包
<!-- mongodb依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> |
--- 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 |
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; } } |
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; } } |
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; } } |
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); } } |
相关文章推荐
- Spring Cloud Feign Client 实现MultipartFile上传文件功能
- Spring Cloud Feign(1.5.9) 进行文件上传
- Spring Cloud中FeignClient支持上传文件的同时提交表单数据
- springcloud文件上传文件名乱码
- 相片的上传与处理(springcloud与mongo集合)
- spring cloud feign 上传文件报not a type supported by this encoder解决方案
- spring cloud之利用zuul实现文件上传(十)
- SpringCloud上传文件,经过Zuul,中文文件名乱码解决办法
- 第二十三章 使用Spring cloud+zuul使用API网关进行上传文件
- spring cloud feign 上传文件
- 使用Spring Cloud Feign上传文件的示例
- SpringCloud 上传文件,经过Zuul,中文文件名乱码解决办法
- Spring Cloud中FeignClient添加上传文件功能
- Spring Cloud Feign Client 实现MultipartFile上传文件功能
- springCloud+springMVC文件上传限制问题
- spring cloud feign 多文件上传实现
- 使用Spring Cloud Feign上传文件
- Spring Cloud Feign的文件上传实现的示例代码
- springcloud文件上传文件名乱码
- spring2.5 mvc使用注解upload上传文件