123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- package com.emato.eoss.api;
- import com.emato.eoss.manager.oss.minio.utils.MinioUtils;
- import com.emato.eoss.msg.resp.Result;
- import io.minio.ObjectWriteResponse;
- import okhttp3.Headers;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.http.MediaType;
- 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.*;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 文件存储API
- *
- * @author Scott Chen
- * @date 2021-03-09
- */
- @RestController
- public class OssApi {
- private static final Logger logger = LoggerFactory.getLogger(OssApi.class);
- @Autowired
- private MinioUtils minioUtils;
- @Value("${minio.buckets.product}")
- private String bucketName;
- /**
- * 上传文件
- * MultipartFile 方式上传
- *
- * @param file 上传文件
- * @param bucket OSS存储桶
- * @param request
- * @param response
- * @return
- */
- @RequestMapping("/upload")
- public Result upload(@RequestParam(value="file") MultipartFile file,
- @RequestParam(value="bucket") String bucket,
- HttpServletRequest request, HttpServletResponse response) {
- bucket = StringUtils.isBlank(bucket) ? bucketName : bucket;
- String objectName = file.getOriginalFilename();
- if (StringUtils.isBlank(objectName)) {
- return Result.error("上传文件名为空");
- }
- String contentType = file.getContentType();
- try{
- InputStream is = file.getInputStream();
- ObjectWriteResponse owr = minioUtils.putFileWithInputStream(bucket, objectName, is,
- null, null, contentType);
- String region = owr.region();
- String object = owr.object();
- Headers headers = owr.headers();
- logger.info("{}上传到{}成功。", object, bucket);
- Map<String, String> map = new HashMap<>();
- map.put("bucket", bucket);
- map.put("fileName", object);
- return Result.success(map);
- } catch (Exception e) {
- String info = "上传文件" + objectName + "出错";
- logger.error(info);
- return Result.error(info);
- }
- }
- /**
- * 上传文件
- * 流方式上传
- *
- * @param bucket OSS存储桶
- * @param objectName OSS存储对象
- * @param byteFile 上传文件字节码
- * @param request
- * @param response
- * @return
- */
- @RequestMapping("/uploadWithByte")
- public Result upload(@RequestParam(value="bucket") String bucket,
- @RequestParam(value="objectName") String objectName,
- @RequestParam(value="inputStream") byte[] byteFile,
- HttpServletRequest request, HttpServletResponse response) {
- try{
- bucket = StringUtils.isBlank(bucket) ? bucketName : bucket;
- if (byteFile == null) {
- return Result.error("上传文件byteFile为空");
- }
- ByteArrayInputStream inputStream = new ByteArrayInputStream(byteFile);
- ObjectWriteResponse owr = minioUtils.putFileWithInputStream(bucket, objectName, inputStream,
- null, null, null);
- String region = owr.region();
- String object = owr.object();
- Headers headers = owr.headers();
- logger.info("{}上传到{}成功。", object, bucket);
- Map<String, String> map = new HashMap<>();
- map.put("bucket", bucket);
- map.put("fileName", object);
- return Result.success(map);
- } catch (Exception e) {
- String info = "上传文件" + objectName + "出错";
- logger.error(info);
- return Result.error(info);
- }
- }
- /**
- * 上传文件
- * 流方式上传
- *
- * @param bucket OSS存储桶
- * @param objectName OSS存储对象
- * @param inputStream 上传文件流
- * @param request
- * @param response
- * @return
- */
- @RequestMapping("/uploadWithInputStream")
- public Result upload(@RequestParam(value="bucket") String bucket,
- @RequestParam(value="objectName") String objectName,
- @RequestParam(value="inputStream") InputStream inputStream,
- HttpServletRequest request, HttpServletResponse response) {
- try{
- bucket = StringUtils.isBlank(bucket) ? bucketName : bucket;
- ObjectWriteResponse owr = minioUtils.putFileWithInputStream(bucket, objectName, inputStream,
- null, null, null);
- String region = owr.region();
- String object = owr.object();
- Headers headers = owr.headers();
- logger.info("{}上传到{}成功。", object, bucket);
- Map<String, String> map = new HashMap<>();
- map.put("bucket", bucket);
- map.put("fileName", object);
- return Result.success(map);
- } catch (Exception e) {
- String info = "上传文件" + objectName + "出错";
- logger.error(info);
- return Result.error(info);
- }
- }
- /**
- * 下载文件
- *
- * @param bucket OSS存储桶
- * @param object OSS存储对象
- * @param outputFileName 另存为文件名
- * @param request
- * @param response
- * @return
- */
- @RequestMapping("/download")
- public Result download(@RequestParam(value="bucket") String bucket,
- @RequestParam(value="object") String object,
- @RequestParam(value="outputFileName", required=false) String outputFileName,
- HttpServletRequest request, HttpServletResponse response) {
- if (StringUtils.isBlank(bucket)) {
- return Result.error("bucket为空");
- }
- if (StringUtils.isBlank(object)) {
- return Result.error("object为空");
- }
- if (StringUtils.isBlank(outputFileName)) {
- outputFileName = object;
- }
- OutputStream os = null;
- try{
- byte[] buffer = minioUtils.getObjectWithByte(bucket, object);
- logger.info("从{}下载{}文件成功,另存为{}", bucket, object, outputFileName);
- response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName);
- response.setCharacterEncoding("UTF-8");
- response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
- os = response.getOutputStream();
- os.write(buffer);
- os.close();
- return null;
- } catch (Exception e) {
- String info = "下载文件" + object + "出错";
- logger.error(info, e);
- return Result.error(info);
- } finally {
- if (os != null) {
- try {
- os.close();
- } catch (IOException e) {
- logger.error("下载文件" + object + ",关闭OutputStream异常", e);
- }
- }
- }
- }
- /**
- * 下载到服务端指定路径
- * 服务端指定路径为OSS系统部署的服务端
- *
- * @param bucket OSS存储桶
- * @param object OSS存储对象
- * @param targetPath 另存为路径
- * @param targetFileName 另存为文件名
- * @param request
- * @param response
- * @return
- */
- @RequestMapping("/downloadObject")
- public Result downloadObject(@RequestParam(value="bucket") String bucket,
- @RequestParam(value="object") String object,
- @RequestParam(value="targetPath", required=false) String targetPath,
- @RequestParam(value="targetFileName", required=false) String targetFileName,
- HttpServletRequest request, HttpServletResponse response) {
- if (StringUtils.isBlank(bucket)) {
- return Result.error("bucket为空");
- }
- if (StringUtils.isBlank(object)) {
- return Result.error("object为空");
- }
- File file = new File(targetPath);
- if (!file.exists()) {
- file.mkdirs();
- }
- // 输出文件全路径
- String outputFullPath = targetPath + File.pathSeparator + targetFileName;
- try{
- minioUtils.downloadObject(
- bucket, object, outputFullPath);
- logger.info("从{}下载{}文件成功,已另存为{}", bucket, object, outputFullPath);
- return Result.success("从" + bucket + "下载" + object + "文件成功,已另存为" + outputFullPath);
- } catch (Exception e) {
- String info = "下载文件" + object + "并另存为" + outputFullPath + "出错";
- logger.error(info);
- return Result.error(info);
- }
- }
- }
|