Minio
.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;
}
}