minio
- 目录
- 1.安装
- 2.页面web访问
- 3.在界面上传
- 4.使用api上传
- 5.使用api下载
目录
公司目前用到文件上传,考虑到费用等情况,可以在公司自己的服务器上搭建一下。本人记录minio的使用情况。
“前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。”
1.安装
docker run -p 9000:9000 -p 9090:9090 \
--name minio \
-d --restart=always \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /mydata/minio/data:/data \
minio/minio server \
/data --console-address ":9090" -address ":9000"
MinIO 部署开始使用默认的根凭据minioadmin:minioadmin。您可以使用 MinIO 控制台测试部署,这是一个内置于 MinIO 服务器的嵌入式对象浏览器。将主机上运行的 Web 浏览器指向http://127.0.0.1:9000并使用根凭据登录。您可以使用浏览器创建存储桶、上传对象以及浏览 MinIO 服务器的内容。
注意:要使用持久存储部署 MinIO,您必须使用该podman -v选项将本地持久目录从主机操作系统映射到容器。例如,-v /mnt/data:/data将主机操作系统驱动器映射/mnt/data到/data容器上。
要覆盖MinIO的自动生成的密钥,您可以将Access和Secret密钥设为环境变量。 MinIO允许常规字符串作为Access和Secret密钥。
/mydata/minio/data // 数据卷存放路径(自行添加)
2.页面web访问
浏览器中访问
http:ip/9000 或者 http:ip/9090 都可以。
密码就是:
-e “MINIO_ROOT_USER=
minioadmin
”
-e “MINIO_ROOT_PASSWORD=minioadmin
” \
docker启动时时候指定的 。
3.在界面上传
-
先创建个bucket。
-
点击上传
列表的文件是我刚上传的。900多M差不多几十秒上传完毕。
4.使用api上传
@PostMapping(value = {"/uploadFile"})
@ApiOperation(value = "上传文件,支持批量上传")
@ApiImplicitParam(name = "files",value = "文件对象",dataType = "File")
public ApiResult uploadFile(@RequestParam("files") List<MultipartFile> files) {
log.info(files.toString());
if (CollectionUtils.isEmpty(files)) {
return ApiResult.error("未选择文件!");
}
List<MinioResponseDTO> MinioResponseDTOList = new ArrayList<>();
for (MultipartFile file : files) {
String originalFilename = file.getOriginalFilename();
// 获取文件拓展名
String extName = FileUtil.extName(originalFilename);
log.info("文件拓展名:" + extName);
// 生成新的文件名,存入到minio
long millSeconds = Instant.now().toEpochMilli();
String minioFileName = millSeconds + RandomStringUtils.randomNumeric(12) + "." + extName;
String contentType = file.getContentType();
log.info("文件mime:{}", contentType);
// 返回文件大小,单位字节
long size = file.getSize();
log.info("文件大小:" + size);
try {
String bucketName = minioConfig.getBucketName();
minioClientUtils.putObject(bucketName, file, minioFileName);
String fileUrl = minioClientUtils.getObjectUrl(bucketName, minioFileName);
MinioFile minioFile = new MinioFile();
minioFile.setOriginalFileName(originalFilename);
minioFile.setFileExtName(extName);
minioFile.setFileName(minioFileName);
minioFile.setFileSize(size);
minioFile.setMime(contentType);
minioFile.setIsDelete(NumberUtils.INTEGER_ZERO);
minioFile.setFileUrl(fileUrl);
boolean insert = minioFile.insert();
if (insert) {//文件地址写入数据库
MinioResponseDTO minioResponseDTO = new MinioResponseDTO();
minioResponseDTO.setFileId(minioFile.getId());
minioResponseDTO.setOriginalFileName(originalFilename);
minioResponseDTO.setFileUrl(fileUrl);
MinioResponseDTOList.add(minioResponseDTO);
}
} catch (Exception e) {
log.error("上传文件出错:{}", e);
return ApiResult.error("上传文件出错");
}
}
return ApiResult.success(MinioResponseDTOList);
}
5.使用api下载
@GetMapping("/download")
@ApiOperation(value = "下载文件")
public void downloadFile(@RequestParam("fileUrl") String fileUrl, HttpServletResponse response) throws IOException {
if (StringUtils.isBlank(fileUrl)){
response.setHeader("Content-type","text/html;charset=UTF-8");
String msg = "文件下载失败";
OutputStream ps = response.getOutputStream();
ps.write(msg.getBytes(StandardCharsets.UTF_8));
return;
}
try {
//拿到文件路径
String url = fileUrl.split("9000/")[1];
//获取文件对象
InputStream object = minioClientUtils.getObject(MinioConstant.FSP_DEV, url.substring(url.indexOf("/") + 1));
byte[] bytes = new byte[1024];
int len = 0;
response.reset();
response.setHeader("Content-Disposition","attachment/filename="+
URLEncoder.encode(url.substring(url.lastIndexOf("/")+1),"UTF-8"));
response.setContentType("application/octet-stream");//将文件下载到浏览器
// response.setContentType("image/jpeg");//浏览器直接展示图片
response.setCharacterEncoding("UTF-8");
OutputStream stream = response.getOutputStream();
while ((len = object.read(bytes))>0){
stream.write(bytes,0,len);
}
stream.close();
}catch (Exception e){
response.setHeader("Content-type","text/html;charset=UTF-8");
String data = "文件下载失败";
OutputStream ps = response.getOutputStream();
ps.write(data.getBytes(StandardCharsets.UTF_8));
}
}
直接在浏览器输入 :
http://localhost:8081/download?fileUrl=http://192.168.196.100:9000/fsp-dev/1675150054071022817109203.csv
源码地址:
https://github.com/hufanglei/minio-demo.git
大功告成,完!!