windows 安装 启动
下载 https://dl.minio.io/server/minio/release/windows-amd64/minio.exe
安装启动
启动一个cmd窗口,输入如下命令
d: (切换磁盘 cd )
D:\java (进入minio.exe所在文件夹)
.\minio.exe server D:\minio\file (启动命令,后面是你上传之后的存储目录)
注意:启动显示的 appkey secretkey是默认登录账户,密码(默认都是minioadmin)
这里minio会给出ACCESS-KEY 和 SECRET-KEY,供后台管理登录使用。
登陆 http://127.0.0.1:9000
linux 安装 启动
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
若是以上的下载链接速度较慢,可使用国内的下载链接:http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
或者直接使用下载好的minio文件
接着为下载的minion添加执行权限: chmod +x minio
启动 /home/data/minio是自己定义的文件目录,进入minio的下载目录
./minio server /home/data/minio
静默启动
nohup ./minio server /home/data/minio >/home/data/minio/minio.log 2>&1 &
静默启动 并 设置端口
nohup ./minio server --address 0.0.0.0:80 /home/data/minio >/home/data/minio/minio.log 2>&1 &
访问: http://127.0.0.1:9000
修改MINIO_ACCESS_KEY和MINIO_SECRET_KEY
进入minio安装目录,如cd /home/data/minio
然后进入配置文件目录 cd .minio.sys/config
直接修改配置文件中 accessKey secretKey
credential": {
“accessKey”: “wzs”,
“secretKey”: “123123123”,
“expiration”: “1970-01-01T00:00:00Z”,
“status”: “enabled”
},
SpringBoot
1.在resources中的application.yml文件添加如下配置:
server:
port: 8080
spring:
servlet:
multipart:
enabled: true #开启文件上传
max-file-size: 500MB
max-request-size: 500MB
minio:
endpoint: http://localhost:9000 #Minio服务所在地址
bucketName: tcc #存储桶名称
accessKey: minioadmin #访问的key
secretKey: minioadmin #访问的秘钥
2.添加minio的maven依赖:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
3.controller的代码如下:
package com.iking.cpl.simulation.agent.controller;
import io.minio.MinioClient;
import io.minio.policy.PolicyType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
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;
import java.text.SimpleDateFormat;
import java.util.Date;
@Slf4j
@RestController("/minioDemo")
public class MinioDemoController {
@Value("${minio.endpoint}")
private String ENDPOINT;
@Value("${minio.bucketName}")
private String BUCKETNAME;
@Value("${minio.accessKey}")
private String ACCESSKEY;
@Value("${minio.secretKey}")
private String SECRETKEY;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping
public String upload(MultipartFile file) {
String s=null;
try {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
//存入bucket不存在则创建,并设置为只读
if (!minioClient.bucketExists(BUCKETNAME)) {
minioClient.makeBucket(BUCKETNAME);
minioClient.setBucketPolicy(BUCKETNAME, "*.*", PolicyType.READ_ONLY);
}
String filename = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 文件存储的目录结构
String objectName = sdf.format(new Date()) + "/" + filename;
// 存储文件
minioClient.putObject(BUCKETNAME, objectName, file.getInputStream(), file.getContentType());
log.info("文件上传成功!");
s=ENDPOINT + "/" + BUCKETNAME + "/" + objectName;
} catch (Exception e) {
log.info("上传发生错误: {}!", e.getMessage());
}
return s;
}
/**
* 文件删除
* @param name
* @return
*/
@DeleteMapping
public String delete(String name) {
try {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
minioClient.removeObject(BUCKETNAME, name);
} catch (Exception e) {
return "删除失败"+e.getMessage();
}
return "删除成功";
}
/**
* 文件下载
* @param filename
* @param httpResponse
*/
@GetMapping
public void downloadFiles(@RequestParam("filename") String filename, HttpServletResponse httpResponse) {
try {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
InputStream object = minioClient.getObject(BUCKETNAME, 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) {
log.info("导出失败:", ex.getMessage());
}
}
}
4.编写好demo程序后使用postman进行测试:使用postman文件上传时选择body中的form-data选项,然后属性栏里面选择file属性就可以实现文件上传了。
上传
删除
下载