Origin

.net core

命令行下输入

 /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("/Upload")]
        public async Task<IActionResult> Upload(IFormFile file )
        {
            try
            {
                var minio = new MinioClient("10.10.10.126:10086", "minioadmin", "minioadmin");
                var data = await Run(minio, file);
                return new JsonResult(new
                {
                    success = true,
                    fileUrl = data.fileUrl,
                    message = data.message
                });
            }
            catch (Exception ex)
            {
                return new JsonResult(new
                {
                    success = false,
                    fileUrl = default(string),
                    message = ex.Message
                });
            }
        }
        
        public async static Task<FileData> Run(MinioClient minio, IFormFile formFile)
        {
            var bucketName = "dubcat.io";
            var location = "us-east-1";
            var objectName = $"pic/{DateTime.Now.ToString("yyyy-MM-dd")}/" + Guid.NewGuid().ToString().Replace("-", string.Empty);
            var contentType = "image/jpeg";
            try
            {
                //判断桶(文件夹)是否存在
                bool found = await minio.BucketExistsAsync(bucketName);
                if (!found)
                {
                    //新增桶(文件夹)
                    await minio.MakeBucketAsync(bucketName, location);
                }
                //文件大小
                var len = formFile.Length;
                //打开请求流以读取上传的文件
                var stream = formFile.OpenReadStream();
                //上传文件到桶(文件夹).
                await minio.PutObjectAsync(bucketName, objectName, stream, len, contentType, null, null);
                //返回url
                var url = await minio.PresignedGetObjectAsync(bucketName, objectName, 3600 * 24 * 7);
                //var data = await minio.StatObjectAsync("picfile", objectName);
                //... 对数据库进行操作,例如存入文件名与桶(文件夹)的名称
                return new FileData { success = true, fileUrl = url, message = "上传成功" };
            }
            catch (MinioException ex)
            {
                return new FileData { success = false, fileUrl = default(string), message = ex.Message };
            }
        }
        
        //http://localhost:5000/getUrl?bucketName=dubcat.io&objextName=pic/2020-10-02/8f32117e4baa4b6da752d65594dd2c0f
        [HttpGet]
        [Route("/getPic")]
        public async Task<IActionResult> DownLoadFile(string bucketName, string objextName)
        {
            try
            {
                if (string.IsNullOrEmpty(bucketName) && string.IsNullOrEmpty(objextName)) return new JsonResult(new { message = "桶(文件夹)名称和文件名称不能为空!" });
                //实例化minio客户端
                var minio = new MinioClient("192.168.3.126:10086", "minioadmin", "minioadmin");
                //获得图片的链接
                var url = await minio.PresignedGetObjectAsync("dubcat.io", objextName, 3600 * 24 * 7);
                //实例化WebClient 对象
                var webClient = new WebClient();
                //根据图片链接转成byte字节数组
                var dataByte = webClient.DownloadData(url);
                Stream stream = new MemoryStream(dataByte);
                return File(stream, "application/vnd.android.package-archive", $"图片下载{DateTime.Now.ToString("yyyyMMddHHmmss")}.jpg");
            }
            catch (Exception ex)
            {
                return new JsonResult(new
                {
                    message = ex.Message,
                    success = false
                });
            }
        }
        
        [HttpGet]
        [Route("/getUrl")]
        public async Task<FileData> DownLoadUrl(string bucketName, string objextName)
        {
            try
            {
                if (string.IsNullOrEmpty(bucketName) && string.IsNullOrEmpty(objextName)) 
                    return new FileData { success = true, fileUrl = "", message = "名称和文件名称不能为空" };
                //实例化minio客户端
                var minio = new MinioClient("192.168.3.126:10086", "minioadmin", "minioadmin");
                //获得图片的链接
                var url = await minio.PresignedGetObjectAsync("dubcat.io", objextName, 3600 * 24 * 7);
                
                return new FileData { success = true, fileUrl = url, message = "上传成功" };
                
                //日志  middleware
                

            }
            catch (Exception ex)
            {
                return new FileData { success = true, fileUrl = "", message = "fail" };
            }
        }

java

  • pom
<dependency>
	<groupId>io.minio</groupId>
	<artifactId>minio</artifactId>
	<version>8.2.1</version>
</dependency>
  • controller
 @PostMapping("/upload")
    @ApiOperation("上传图片")
    public FileResponse uploadFile(MultipartFile file) {

        String fileType = FileTypeUtils.getFileType(file);

        if (fileType != null) {
            FileResponse fileRes = minioService.putObject(file, env.getProperty("minio.bucket-name"), fileType);
            String fileN = fileRes.getFilename();
            String fileT = fileRes.getContentType();
            return fileRes;
        }
    }
  • service
 @SneakyThrows
    @Override
    public FileResponse putObject(MultipartFile multipartFile, String bucketName, String fileType) {

        LOGGER.info("MinioServiceImpl | putObject is called");

        try {
            bucketName = StringUtils.isNotBlank(bucketName) ? bucketName : "mtl";

            LOGGER.info("MinioServiceImpl | putObject | bucketName : " + bucketName);

            if (!this.bucketExists(bucketName)) {
                this.makeBucket(bucketName);
                LOGGER.info("MinioServiceImpl | putObject | bucketName : " + bucketName + " created");
            }

            String fileName = multipartFile.getOriginalFilename();
            LOGGER.info("MinioServiceImpl | getFileType | fileName : " + fileName);

            Long fileSize = multipartFile.getSize();
            LOGGER.info("MinioServiceImpl | getFileType | fileSize : " + fileSize);

            String objectName = UUID.randomUUID().toString().replaceAll("-", "")
                    + fileName.substring(fileName.lastIndexOf("."));
            LOGGER.info("MinioServiceImpl | getFileType | objectName : " + objectName);

            LocalDateTime createdTime = LocalDateTime.now();
            LOGGER.info("MinioServiceImpl | getFileType | createdTime : " + createdTime);

            minioUtil.putObject(bucketName, multipartFile, objectName,fileType);

            LOGGER.info("MinioServiceImpl | getFileType | url : " + env.getProperty("minio.getEndpoint")+"/"+bucketName+"/"+objectName);

            return FileResponse.builder()
                    .filename(objectName)
                    .fileSize(fileSize)
                    .contentType(fileType)
                    .createdTime(createdTime)
                    .build();

        } catch (Exception e) {
            LOGGER.info("MinioServiceImpl | getFileType | Exception : " + e.getMessage());
            return null;
        }
    }