linux下安装minio

1、认识和了解minio,不做过多赘述
官网地址
2、下载和解压安装包

wget https://dl.minio.io/server/minio/release/linux-amd64/minio
# 授权
chmod 777 -R minio
# 设置用户名密码
export MINIO_ACCESS_KEY=admin 
export MINIO_SECRET_KEY=MMmm123, 
# 设置后台访问端口以及API交互端口
nohup ./minio server --console-address ":9000" --address ":9001" ./data/ > ./minio.log 2>&1 &
# 其中 9000为管理端访问端口 9001 为API端口

3、java对接

 public class MinioConfig {
    /**
     * @return
     * @Author zy
     * @Description 新建连接 创建桶
     * @Param
     */
    @Bean
    public MinioClient minioClient() {
        try {
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(MinioProperities.endpoint)
                            .credentials(MinioProperities.accessKey, MinioProperities.secretKey)
                            .build();
            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(MinioProperities.bucketName).build());
            if (!found) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(MinioProperities.bucketName).build());
                setBucketPolicy(minioClient);
            }
            return minioClient;
        } catch (Exception ex) {
            throw new RuntimeException("init minio client fail...", ex);
        }
    }

    /**
     * @author zy
     * @Description 设置桶权限,这边主要用于图片,所以设置成*的方式
     * @Param [minioClient]
     * @return void
     **/
    private void setBucketPolicy(MinioClient minioClient) {
        String READ_WRITE = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + MinioProperities.bucketName + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + MinioProperities.bucketName + "/*\"]}]}";
        try {
            minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(MinioProperities.bucketName).config(READ_WRITE.toString()).build());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

配置项,实际中替换成从配置文件中读取

public class MinioProperities {
    public static String endpoint="http://192.168.1.10:9001"; // IP地址
    public static Integer port = 9001; // 端口号
    public static String accessKey="admin"; // 账号
    public static String secretKey="MMmm123,"; // 密码
    public static Boolean secure = Boolean.FALSE; // 是否使用安全连接
    public static String region = "us-test"; // 桶的地域标签
    public static String bucketName = "test"; //桶名称
    public static String remoteUrl="http://192.168.1.10:9001"; //外网可访问的基础地址
    public static Integer outTimeToConnect; //超时连接时间
}

上传文件

@Controller
@RequestMapping("/api/oss")
public class FileUploadController {

    /**
     * @author zy
     * @Description 上传文件,成功返回文件的全路径,失败返回1001以及上传失败;
     * @time 2021/9/13 13:54
     * @Param [file, request]
     * @return AjaxResult
     **/
    @ResponseBody
    @RequestMapping(value = "/upload", method = {OPTIONS, POST})
    public AjaxResult upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        try {
            String upload = MinioUtils.upload(file);
            if(StringUtil.isBlank(upload)){
                return AjaxResult.error();
            }
            return AjaxResult.success(upload);
        } catch (Exception e) {
            return AjaxResult.error();
        }
    }
}

工具类,其中
MinioClient 通过统一的方式获取到bean,不抽取工具类时,直接使用 @Autowired 的方式注入即可

/**
 * @author zy
 * @title: MinioUtils
 * @description: 文件服务器连接工具
 */
@Slf4j
public class MinioUtils {
    /**
     * @Description: 上传文件到文件服务器
     * @Author: zy
     * [file]
     * java.lang.String 返回文件路径
     **/
    public static String upload(MultipartFile file) {
        String name = getObjectName("file", file.getOriginalFilename(), DateUtil.sdf3ymdHms.format(new Date()));
        return upload(minioClient, name, MinioProperities.bucketName, URLConnection.guessContentTypeFromName(file.getOriginalFilename().trim()), file);
    }
    
    private static String getObjectName(String mark, String fileName, String createTime) {
        String objectName = mark + "/" + createTime + "_" + fileName;
        return objectName;
    }

    /**
     * @Description: 上传
     * @Author: zy
     * [minioClient, objectName, bucketName, mimeType, file, remoteUrl]
     * java.lang.String
     */
    private static String upload(MinioClient minioClient, String objectName, String bucketName, String mimeType, MultipartFile file) {
        try {
            minioClient.putObject(
                    PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
                            file.getInputStream(), file.getSize(), -1).contentType(mimeType == null ? MediaType.APPLICATION_OCTET_STREAM_VALUE : mimeType)
                            .build());
            String res = "/" + bucketName + "/" + objectName;
            return res;

        } catch (Exception ex) {
            log.error("upload file error...", ex);
            return null;
        }
    }
}

管理端访问地址
ip:9000
找打对应的桶即可查看;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值