1、yaml增加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2、 增加实体
package com.cndcare.msc.bean;
import com.cndcare.msc.cloud.base.result.RestResult;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Document(collection = "file_info_t")
@CompoundIndexes({
@CompoundIndex(name = "adapterInterIdIdx", def = "{'adapterInterId': 1}"),
@CompoundIndex(name = "createTimeIdx", def = "{'createTime': -1}")
})
public class AdapterHospInterLog implements Serializable {
@Id
private String id;
private String taskId; // 任务ID
private String busCode; // 业务编码
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
3、控制层代码
package com.cndcare.msc.controller;
import com.alibaba.fastjson.JSONObject;
import com.cndcare.msc.bean.AdapterHospInterLog;
import com.cndcare.msc.bean.FileInfo;
import com.cndcare.msc.cloud.base.common.LayuiPageInfo;
import com.cndcare.msc.cloud.base.result.RestResult;
import com.cndcare.msc.cloud.base.result.RestResultUtil;
import com.github.pagehelper.PageInfo;
import com.mongodb.client.gridfs.GridFSBuckets;
import com.mongodb.client.gridfs.model.GridFSFile;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.entity.ContentType;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@RestController
@Api(tags = "mongo文件")
@RequestMapping("/mongo")
@Slf4j
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MongoFileController {
private final MongoDbFactory mongoDbFactory;
private final MongoConverter mongoConverter;
private final MongoTemplate mongoTemplate;
@Value("${spring.application.name}")
private String applicationName;
private String bucket = "cloud";
@ApiOperation("上传文件")
@PostMapping("/cloud/store")
public RestResult store(
MultipartFile file,
@RequestParam(value = "ref", defaultValue = "") String ref
) throws Exception {
log.info("store");
GridFsTemplate gridFsTemplate = new GridFsTemplate(mongoDbFactory, mongoConverter, bucket);
ObjectId objectId = gridFsTemplate.store(file.getInputStream(),
file.getOriginalFilename(), file.getContentType());
FileInfo fileInfo = new FileInfo();
fileInfo.setObjectId(objectId + "");
fileInfo.setRef(ref);
fileInfo.setBucket(bucket);
fileInfo.setOriginalFilename(file.getOriginalFilename());
log.info("store->"+file.getOriginalFilename());
fileInfo.setContentType(file.getContentType());
fileInfo.setSize(file.getSize());
fileInfo.setCreateTime(new Date());
fileInfo.setSrc(FileInfo.MONGO_LOOK_URL + bucket + "/" + objectId);
mongoTemplate.insert(fileInfo, "file_info_t");
AdapterHospInterLog adapterHospInterLog = null;
adapterHospInterLog = AdapterHospInterLog.builder().taskId("123").busCode("hrp").createTime(new Date()).build();
mongoTemplate.save(adapterHospInterLog);
// baseDataClient.saveDiscardFile(fileInfo.getId(),fileInfo.getObjectId());
return RestResultUtil.success(fileInfo);
}
@ApiOperation("下载文件")
@GetMapping("/downloadFile/cloud")
public void downloadFile(
@RequestParam String fileId,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
log.info("fileId:"+fileId);
GridFsTemplate gridFsTemplate = new GridFsTemplate(mongoDbFactory, mongoConverter, bucket);
Query query = Query.query(Criteria.where("_id").is(fileId));
// 查询单个文件
GridFSFile gfsFile = gridFsTemplate.findOne(query);
if (null == gfsFile)
throw new RuntimeException("文件找不到了!");
GridFsResource gridFsResource =
new GridFsResource(gfsFile,
GridFSBuckets.create(mongoDbFactory.getDb(), bucket).openDownloadStream(gfsFile.getObjectId()));
String fileName = gfsFile.getFilename();
log.info("文件名:"+fileName);
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
log.info("文件名1:"+fileName);
//处理中文文件名乱码
if (request.getHeader("User-Agent").toUpperCase().contains("MSIE") ||
request.getHeader("User-Agent").toUpperCase().contains("TRIDENT")
|| request.getHeader("User-Agent").toUpperCase().contains("EDGE")) {
log.info("fileIdIE浏览器的处理:"+fileId);
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
} /*else {
log.info("fileId非IE浏览器的处理:"+fileId);
//非IE浏览器的处理:
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
log.info("fileId非IE浏览器的处理:"+fileName);
}*/
// 通知浏览器进行文件下载
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
// response.setContentType(ContentType.IMAGE_JPEG.getMimeType());
response.setContentType(ContentType.APPLICATION_OCTET_STREAM.getMimeType());
IOUtils.copy(gridFsResource.getInputStream(), response.getOutputStream());
//return RestResultUtil.success();
}
@ApiOperation("获取JSON信息")
@GetMapping("/findJson/cloud")
public AdapterHospInterLog findJson(
@RequestParam String fileId,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
log.info("fileId:"+fileId);
Query query = new Query(
Criteria.where("_id").is(fileId)
);
List<AdapterHospInterLog> adapterHospInterLogList = mongoTemplate.find(query, AdapterHospInterLog.class);
return adapterHospInterLogList.get(0);
}
@ApiOperation("上传JSON")
@PostMapping("/cloud/tojson")
public RestResult store(
) throws Exception {
log.info("tojson");
AdapterHospInterLog adapterHospInterLog = null;
adapterHospInterLog = AdapterHospInterLog.builder().taskId("123").busCode("hrp").createTime(new Date()).build();
mongoTemplate.save(adapterHospInterLog);
return RestResultUtil.success(adapterHospInterLog);
}
}