package com.anx.minio.controller;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.client.MultipartBodyBuilder;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @author liangdaliang
* @Description:
* @date 2022-07-21 16:12
*/
@Slf4j
@RestController
public class MinioFileController {
@Autowired
private MinioClient minioClient;
private static final String MINIO_BUCKET = "test";
@GetMapping("/list")
public List<Object> list(ModelMap map) throws Exception {
Iterable<Result<Item>> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(MINIO_BUCKET).recursive(true).build());
Iterator<Result<Item>> iterator = myObjects.iterator();
List<Object> items = new ArrayList<>();
String format = "{'fileName':'%s','fileSize':'%s'}";
while (iterator.hasNext()) {
Item item = iterator.next().get();
items.add(String.format(format, item.objectName(), formatFileSize(item.size())));
}
return items;
}
@PostMapping("/upload")
public Res upload(@RequestParam(name = "file", required = false) MultipartFile[] file) {
Res res = new Res();
res.setCode(500);
if (file == null || file.length == 0) {
res.setMessage("上传文件不能为空");
return res;
}
List<String> orgfileNameList = new ArrayList<>(file.length);
for (MultipartFile multipartFile : file) {
String orgfileName = multipartFile.getOriginalFilename();
orgfileNameList.add(orgfileName);
try {
InputStream in = multipartFile.getInputStream();
minioClient.putObject(PutObjectArgs.builder()
.bucket(MINIO_BUCKET)
.object(orgfileName)
.stream(in, multipartFile.getSize(), -1)
.build());
// minioClient.putObject(MINIO_BUCKET, orgfileName, in, new PutObjectOptions(in.available(), -1));
in.close();
} catch (Exception e) {
log.error(e.getMessage());
res.setMessage("上传失败");
return res;
}
}
Map<String, Object> data = new HashMap<String, Object>();
data.put("bucketName", MINIO_BUCKET);
data.put("fileName", orgfileNameList);
res.setCode(200);
res.setMessage("上传成功");
res.setData(data);
return res;
}
@RequestMapping("/download/{fileName}")
public void download(HttpServletResponse response, @PathVariable("fileName") String fileName) {
InputStream in = null;
try {
StatObjectResponse stat = minioClient.statObject(StatObjectArgs.builder().bucket(MINIO_BUCKET).object(fileName).build());
response.setContentType(stat.contentType());
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
in = minioClient.getObject(GetObjectArgs.builder()
.bucket(MINIO_BUCKET)
.object(fileName)
.build());
IOUtils.copy(in, response.getOutputStream());
} catch (Exception e) {
log.error(e.getMessage());
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
log.error(e.getMessage());
}
}
}
}
@DeleteMapping("/delete/{fileName}")
public Res delete(@PathVariable("fileName") String fileName) {
Res res = new Res();
res.setCode(200);
try {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(MINIO_BUCKET).object(fileName).build());
} catch (Exception e) {
res.setCode(500);
log.error(e.getMessage());
}
return res;
}
private static String formatFileSize(long fileS) {
DecimalFormat df = new DecimalFormat("#.00");
String fileSizeString = "";
String wrongSize = "0B";
if (fileS == 0) {
return wrongSize;
}
if (fileS < 1024) {
fileSizeString = df.format((double) fileS) + " B";
} else if (fileS < 1048576) {
fileSizeString = df.format((double) fileS / 1024) + " KB";
} else if (fileS < 1073741824) {
fileSizeString = df.format((double) fileS / 1048576) + " MB";
} else {
fileSizeString = df.format((double) fileS / 1073741824) + " GB";
}
return fileSizeString;
}
/**
* Description 下载 minio文件,返回流的方式,同时支持在线预览
*
* @param object 文件名称
* @param isOnline 是否在线预览,不同文件类型请修改 setContentType
* @param response 响应对象
* @return void
* @time 2022/7/10 9:51
**/
public void download(String object, Boolean isOnline, HttpServletResponse response) {
try (InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket(MINIO_BUCKET)
.object(object)
.build())) {
try {
BufferedInputStream br = new BufferedInputStream(stream);
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
if (Objects.nonNull(isOnline) && isOnline) { // 在线打开方式
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=" + object);
} else { // 纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + object);
}
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.flush();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Description 以流的方式上传文件
*
* @param in input 流
* @param object 文件名
* @param size 文件大小
* @return java.lang.Boolean
* @time 2022/7/10 9:55
**/
public Boolean uploadObject(InputStream in, String object, Long size) {
try {
minioClient.putObject(
PutObjectArgs.builder()
.bucket(MINIO_BUCKET)
.object(object)
.stream(in, s
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
Java分布式文件对象存储Minio框架并发上传、下载、合并、删除等操作示例Demo完整版 (116个子文件)
MinIoUtils.class 12KB
MinioFileController.class 7KB
UploadDto.class 5KB
MinioController.class 5KB
R.class 4KB
StorageProperty.class 3KB
Res.class 3KB
WebMvcConfig.class 1KB
MinIoUtils$Str2IntComparator.class 1KB
MinioConfiguration.class 1KB
MinioApplication.class 730B
MinioApplicationTests.class 528B
.gitignore 223B
minio.iml 10KB
MinioFileController.java 21KB
MinIoUtils.java 14KB
MinioController.java 5KB
MinioConfiguration.java 2KB
UploadDto.java 1KB
R.java 1KB
WebMvcConfig.java 834B
StorageProperty.java 677B
Res.java 470B
MinioApplication.java 376B
MinioApplicationTests.java 213B
.name 5B
application.properties 360B
application.properties 360B
uiDesigner.xml 9KB
workspace.xml 4KB
pom.xml 3KB
jarRepositories.xml 1KB
Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml 877B
compiler.xml 870B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_3_3_RELEASE.xml 811B
Maven__org_springframework_boot_spring_boot_starter_logging_2_3_3_RELEASE.xml 790B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_3_3_RELEASE.xml 783B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_2.xml 778B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_3_3_RELEASE.xml 776B
Maven__org_springframework_boot_spring_boot_starter_json_2_3_3_RELEASE.xml 769B
Maven__org_springframework_boot_spring_boot_starter_test_2_3_3_RELEASE.xml 769B
Maven__org_springframework_boot_spring_boot_starter_web_2_3_3_RELEASE.xml 762B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 742B
Maven__org_springframework_boot_spring_boot_devtools_2_3_3_RELEASE.xml 741B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml 737B
Maven__org_springframework_boot_spring_boot_starter_2_3_3_RELEASE.xml 734B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_2.xml 723B
Maven__org_springframework_boot_spring_boot_test_2_3_3_RELEASE.xml 713B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_37.xml 702B
Maven__org_springframework_spring_expression_5_2_8_RELEASE.xml 700B
Maven__com_google_errorprone_error_prone_annotations_2_5_1.xml 694B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml 693B
Maven__org_springframework_spring_context_5_2_8_RELEASE.xml 679B
Maven__org_springframework_boot_spring_boot_2_3_3_RELEASE.xml 678B
Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_72.xml 676B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 675B
Maven__org_junit_platform_junit_platform_commons_1_6_2.xml 675B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 675B
Maven__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml 672B
Maven__org_springframework_spring_webmvc_5_2_8_RELEASE.xml 672B
Maven__org_junit_platform_junit_platform_engine_1_6_2.xml 668B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_37.xml 667B
Maven__org_springframework_spring_beans_5_2_8_RELEASE.xml 665B
Maven__com_carrotsearch_thirdparty_simple_xml_safe_2_7_1.xml 662B
Maven__org_springframework_spring_test_5_2_8_RELEASE.xml 658B
Maven__org_springframework_spring_core_5_2_8_RELEASE.xml 658B
Maven__org_junit_jupiter_junit_jupiter_params_5_6_2.xml 657B
Maven__org_junit_jupiter_junit_jupiter_engine_5_6_2.xml 657B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 653B
Maven__org_springframework_spring_web_5_2_8_RELEASE.xml 651B
Maven__org_springframework_spring_jcl_5_2_8_RELEASE.xml 651B
Maven__org_springframework_spring_aop_5_2_8_RELEASE.xml 651B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml 650B
Maven__com_fasterxml_jackson_core_jackson_core_2_11_2.xml 644B
Maven__org_mockito_mockito_junit_jupiter_3_3_3.xml 640B
Maven__org_junit_jupiter_junit_jupiter_api_5_6_2.xml 636B
Maven__com_google_j2objc_j2objc_annotations_1_3.xml 629B
Maven__org_jetbrains_kotlin_kotlin_stdlib_1_3_72.xml 627B
Maven__net_bytebuddy_byte_buddy_agent_1_10_14.xml 627B
Maven__org_apache_commons_commons_compress_1_21.xml 626B
Maven__org_apache_logging_log4j_log4j_api_2_13_3.xml 615B
Maven__org_apiguardian_apiguardian_api_1_1_0.xml 614B
Maven__org_checkerframework_checker_qual_3_8_0.xml 613B
Maven__ch_qos_logback_logback_classic_1_2_3.xml 610B
Maven__org_junit_jupiter_junit_jupiter_5_6_2.xml 608B
Maven__org_xerial_snappy_snappy_java_1_1_8_4.xml 608B
Maven__com_google_guava_failureaccess_1_0_1.xml 604B
Maven__org_bouncycastle_bcprov_jdk15on_1_69.xml 604B
Maven__ch_qos_logback_logback_core_1_2_3.xml 589B
Maven__com_jayway_jsonpath_json_path_2_4_0.xml 588B
Maven__com_google_code_findbugs_jsr305_3_0_2.xml 587B
Maven__net_bytebuddy_byte_buddy_1_10_14.xml 585B
Maven__org_assertj_assertj_core_3_16_1.xml 584B
Maven__net_minidev_accessors_smart_1_2.xml 584B
Maven__com_google_guava_guava_30_1_1_jre.xml 583B
Maven__org_skyscreamer_jsonassert_1_5_0.xml 579B
Maven__org_xmlunit_xmlunit_core_2_7_0.xml 577B
Maven__org_mockito_mockito_core_3_3_3.xml 577B
Maven__org_slf4j_jul_to_slf4j_1_7_30.xml 576B
Maven__org_opentest4j_opentest4j_1_2_0.xml 575B
共 116 条
- 1
- 2
love121
- 粉丝: 1
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0