启动minio:
进入minio.exe所在目录,打开cmd
输入.\minio.exe server D:\upload
D:\upload是文件存储地址
RootUser: minioadmin
RootPass: minioadmin
minio运用到java中
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>6.0.7</version>
</dependency>
@PostMapping("/upload_files")
public R<String> put(@ApiIgnore @RequestParam MultipartFile file,@RequestParam String bucketName) throws IOException {
BladeFile bladeFile = minioTemplate.putFile(bucketName,file.getOriginalFilename(),file.getInputStream());
String link = bladeFile.getLink();
return R.data(link);
}
详细代码:
package org.springblade.demo.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.minio.MinioClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.springblade.core.oss.minio.MinioTemplate;
import org.springblade.core.oss.model.BladeFile;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
/**
* @author 次次皮
* @since 2022-06-10 13:46
*/
@RestController
@AllArgsConstructor
@RequestMapping("/file")
@Api(value = "上传、删除、下载", tags = "文件相关接口")
public class FileController {
MinioTemplate minioTemplate;
/**
* 多文件上传
*
* @param files
* @return
*/
@PostMapping("/upload")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "上传文件", notes = "传入files")
public String upload(@RequestParam(name = "file") MultipartFile[] files) {
String link = "";
String rtn = "";
//防御性编程,批量限制少于10个
if (files != null) {
if (files.length == 0 && files.length > 10) {
rtn = "";
} else {
try {
StringBuilder filenames = new StringBuilder();
for (MultipartFile file : files) {
BladeFile bladeFile = minioTemplate.putFile("demo.minio", file.getOriginalFilename(), file.getInputStream());
// link = bladeFile.getLink();
filenames.append(bladeFile.getName() + ";");
}
rtn = filenames.toString();
} catch (Exception e) {
// "上传失败:" + e.getMessage();
rtn = "";
}
}
}
return rtn;
}
//文件删除
@PostMapping("/delete_file")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "删除文件", notes = "传入file名称")
public String delete(@ApiParam(value = "文件名称") @RequestParam String filename) {
try {
MinioClient minioClient = new MinioClient("http://127.0.0.1:9000", "minioadmin", "minioadmin");
// upload/20220609/d060d3d9cdc0b521f7e5c64d5a2141c8.jpg
minioClient.removeObject("demo.minio", filename);
} catch (Exception e) {
return "删除失败" + e.getMessage();
}
return "删除成功";
}
@GetMapping("/download_file")
@ApiOperationSupport(order = 3)
@ApiOperation(value = "下载文件", notes = "传入file名称")
public String downloadFiles(@ApiParam(value = "文件名称") @RequestParam String filename, HttpServletResponse httpResponse) {
try {
MinioClient minioClient = new MinioClient("http://127.0.0.1:9000", "minioadmin", "minioadmin");
InputStream object = minioClient.getObject("demo.minio", filename);
byte buf[] = new byte[1024];
int length = 0;
httpResponse.reset();
httpResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
httpResponse.setContentType("application/octet-stream");
httpResponse.setCharacterEncoding("utf-8");
OutputStream outputStream = httpResponse.getOutputStream();
while ((length = object.read(buf)) > 0) {
outputStream.write(buf, 0, length);
}
outputStream.close();
} catch (Exception ex) {
return "下载失败";
}
return "下载成功";
}
}
@ApiOperationSupport(order = 1)
@ApiOperation(value = "上传", notes = "传入file")
@PostMapping("/putFile")
public R<BladeFile> annoUpload(@RequestParam MultipartFile file) {
try {
BladeFile bladeFile = new BladeFile();
String originalName = file.getOriginalFilename();
String fileName = "farmer-data/" + DateUtil.today() + "/" + StringUtil.randomUUID() + "." + FileUtil.getFileExtension(originalName);
InputStream stream = file.getInputStream();
minioClient.putObject(PutObjectArgs.builder()
.bucket("sop-mss")
.object(fileName)
.stream(stream, stream.available(), -1L)
.contentType("application/octet-stream").build());
bladeFile.setName(fileName);
bladeFile.setOriginalName(originalName);
return R.data(bladeFile);
} catch (Exception ex) {
log.error("上传文件异常", ex);
return R.fail("上传失败");
}
}