您的位置:首页 > 编程语言 > Java开发

文件上传(Springcloud与mongo集合)

2016-09-08 00:00 330 查看
摘要: 文件上传(Springcloud与mongo集合)

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MongoDB Springcloud