java + minio实现image图片上传下载接口的deme

项目deme地址:https://gitee.com/itliulei/springboot-minio-demo.git
idea spring+maven+mybatis jdk:1.8
最近做了一个项目,使用了一个Minio(对象存储服务器)作为图片的存放,实际他的功能还很强大

简介:

Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB
Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。

温馨提示:项目的配置地址什么的我就不改了,我的服务器也是玩的,如果我没有研究其他的项目配置的minio地址直接就可以用,如果不可以用,你就自己重新搭一个吧~~
按照执行循序贴代码:
1:MinioController

public class MinioController {
    @Autowired
    MinIOUtils minIOUtils;
    /**
     * 上传图片
     * @param file
     * @return
     */
    @PostMapping("/uploadImage")
    public Result uploadImage(@RequestParam("file") MultipartFile file){
        return minIOUtils.uploadImage(file);

    }

    /**
     * 下载图片
     * @param imageUri
     * @param request
     * @param response
     * @throws Exception
     */
    @GetMapping("/getImageByUri")
    public void   getImageByUri(@RequestParam("imageUri")String imageUri, HttpServletRequest request, HttpServletResponse response) throws Exception {

        response.sendRedirect(minIOUtils.getImageByUri(imageUri));
    }
}

MinIOUtils

@PropertySource("classpath:application.properties")
@Component
public class MinIOUtils {
    @Value("${minio.endPoint}")
    private String  endPoint;
    @Value("${minio.port}")
    private Integer  port;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;

    @Value("${minio.bucketName}")
    private String  bucketName;
    private static MinioClient instance ;
    public MinioClient getInstance() throws InvalidPortException, InvalidEndpointException {
        if (instance == null) {
            instance = new MinioClient(endPoint,port,accessKey,secretKey);
        }
        return instance;
    }

    /**
     * 下载图片
     * @param uri
     * @return
     * @throws Exception
     */
    public String  getImageByUri(String uri) throws Exception  {
        // 返回一个下载地址
        return getInstance().presignedGetObject(bucketName,uri);
    }

    /**
     * 上传图片
     * @param multipartFile
     * @return
     */
    public Result uploadImage(MultipartFile multipartFile){
        String fileName=multipartFile.getOriginalFilename();
        ImageUri imageUri=new ImageUri();
        String fileCode= UUIDGenerator.generate()+fileName.substring(fileName.lastIndexOf('.'));
        try {
            InputStream inputStream=multipartFile.getInputStream();
            //如果大于500kb,则进行压缩
            if (multipartFile.getSize()>1024*500){
                File tempFIe= File.createTempFile("temp",fileName.substring(fileName.lastIndexOf('.')));
                Thumbnails.of(inputStream).scale(0.25f).toFile(tempFIe);
                FileInputStream fileInputStream=new FileInputStream(tempFIe);
                Long l= Long.valueOf(fileInputStream.available());
                log.info("Size:"+String.valueOf(l));
                getInstance().putObject(bucketName,fileCode,fileInputStream,l,"application/octet-stream");
                fileInputStream.close();

            }else {
                Long l= Long.valueOf(inputStream.available());
                getInstance().putObject(bucketName,fileCode,inputStream,l,"application/octet-stream");
            }

        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
            return Result.error("保存失败");
        }
        imageUri.setImageUri(fileCode);
        return Result.ok(imageUri);
    }

    /**
     * 批量下载图片
     * @param strings
     * @return
     * @throws Exception
     */
    public List getUriList(List strings) throws Exception {

        List list=new ArrayList<>();
        ImageUri uri;
        for (String s:strings){
            uri=new ImageUri();
            uri.setImageUri(getInstance().presignedGetObject(bucketName,s));
            list.add(uri);
        }

        return list;
    }
}

因为是把这个功能拆出来做个deme,就用postman做的测试
1:上传截图
java + minio实现image图片上传下载接口的deme_第1张图片
2:下载截图:因为下载返回的是一个响应(包含图片的下载地址),postman可以下载到本地(温馨提示:下载要点击Send下面的 Send and Download!!!)会蹦出来一个保存框,是一个二进制的文件,.bin后缀,你需要手动修改一下格式,例如我的jpg格式。
java + minio实现image图片上传下载接口的deme_第2张图片
3:温馨提示,下载接口实际返回的是一个图片的实际下载路径,不过也能通过postman下载到本地
java + minio实现image图片上传下载接口的deme_第3张图片

你可能感兴趣的:(javaDemo)