minio获取上传文件_Java中文件上传下载 --使用Minio

本文展示了如何在Java应用中使用Minio库进行文件上传和下载操作。通过MinioTemplate类实现创建bucket、获取bucket信息、上传文件、下载文件等核心功能。上传文件方法接收MultipartFile对象,下载文件方法则通过HttpServletResponse响应到客户端。
摘要由CSDN通过智能技术生成

@RequiredArgsConstructorpublic class MinioTemplate implements InitializingBean { private final String endpoint; private final String accessKey; private final String secretKey; private MinioClient client; /** * 创建bucket * * @param bucketName bucket名称 */ @SneakyThrows public void createBucket(String bucketName) { if (!client.bucketExists(bucketName)) { client.makeBucket(bucketName); } } /** * 获取全部bucket *

* https://docs.minio.io/cn/java-client-api-reference.html#listBuckets */ @SneakyThrows public List getAllBuckets() { return client.listBuckets(); } /** * 根据bucketName获取信息 * @param bucketName bucket名称 */ @SneakyThrows public Optional getBucket(String bucketName) { return client.listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst(); } /** * 根据bucketName删除信息 * @param bucketName bucket名称 */ @SneakyThrows public void removeBucket(String bucketName) { client.removeBucket(bucketName); } /** * 根据文件前置查询文件 * * @param bucketName bucket名称 * @param prefix 前缀 * @param recursive 是否递归查询 * @return MinioItem 列表 */ @SneakyThrows public List getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) { List objectList = new ArrayList<>(); Iterable> objectsIterator = client .listObjects(bucketName, prefix, recursive); while (objectsIterator.iterator().hasNext()) { objectList.add(new MinioItem(objectsIterator.iterator().next().get())); } return objectList; } /** * 获取文件外链 * * @param bucketName bucket名称 * @param objectName 文件名称 * @param expires 过期时间 <=7 * @return url */ @SneakyThrows public String getObjectURL(String bucketName, String objectName, Integer expires) { return client.presignedGetObject(bucketName, objectName, expires); } /** * 获取文件 * * @param bucketName bucket名称 * @param objectName 文件名称 * @return 二进制流 */ @SneakyThrows public InputStream getObject(String bucketName, String objectName) { return client.getObject(bucketName, objectName); } /** * 上传文件 * * @param bucketName bucket名称 * @param objectName 文件名称 * @param stream 文件流 * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject */ public void putObject(String bucketName, String objectName, InputStream stream) throws Exception { client.putObject(bucketName, objectName, stream, stream.available(), "application/octet-stream"); } /** * 上传文件 * * @param bucketName bucket名称 * @param objectName 文件名称 * @param stream 文件流 * @param size 大小 * @param contextType 类型 * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject */ public void putObject(String bucketName, String objectName, InputStream stream, long size, String contextType) throws Exception { client.putObject(bucketName, objectName, stream, size, contextType); } /** * 获取文件信息 * * @param bucketName bucket名称 * @param objectName 文件名称 * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject */ public ObjectStat getObjectInfo(String bucketName, String objectName) throws Exception { return client.statObject(bucketName, objectName); } /** * 删除文件 * * @param bucketName bucket名称 * @param objectName 文件名称 * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject */ public void removeObject(String bucketName, String objectName) throws Exception { client.removeObject(bucketName, objectName); } @Override public void afterPropertiesSet() throws Exception { Assert.hasText(endpoint, "Minio url 为空"); Assert.hasText(accessKey, "Minio accessKey为空"); Assert.hasText(secretKey, "Minio secretKey为空"); this.client = new MinioClient(endpoint, accessKey, secretKey); }文件上传方法: public String upload(@RequestParam("file") MultipartFile file) { String fileName = file.getOriginalFilename(); Map resultMap = new HashMap<>(4); resultMap.put("bucketName", "bucketName"); resultMap.put("fileName", fileName); try { minioTemplate.putObject("bucketName", fileName, file.getInputStream());  } catch (Exception e) { return "上传失败"; } return "上传成功";}文件下载方法: public void download(String fileName, HttpServletResponse response, HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); String[] nameArray = StrUtil.split(fileName, "-"); try (InputStream inputStream = minioTemplate.getObject(nameArray[0], nameArray[1])) { //解决乱码 if ( //IE 8 至 IE 10 userAgent.toUpperCase().contains("MSIE") || //IE 11 userAgent.contains("Trident/7.0")) { fileName = java.net.URLEncoder.encode(nameArray[1], "UTF-8"); } else{ fileName = new String(nameArray[1].getBytes("UTF-8"),"iso-8859-1"); } response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setContentType("application/force-download"); response.setCharacterEncoding("UTF-8"); IoUtil.copy(inputStream, response.getOutputStream()); } catch (Exception e) { log.error("文件读取异常", e); }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值