日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java中上传文件_Java中文件上传下载 --使用Minio

發(fā)布時間:2025/3/15 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中上传文件_Java中文件上传下载 --使用Minio 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Minio模板類:

@RequiredArgsConstructor

public class MinioTemplate implements InitializingBean {

private final String endpoint;

private final String accessKey;

private final String secretKey;

private MinioClient client;

/**

* 創(chuàng)建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();

}

/**

* 根據(jù)bucketName獲取信息

* @param bucketName bucket名稱

*/

@SneakyThrows

public Optional getBucket(String bucketName) {

return client.listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst();

}

/**

* 根據(jù)bucketName刪除信息

* @param bucketName bucket名稱

*/

@SneakyThrows

public void removeBucket(String bucketName) {

client.removeBucket(bucketName);

}

/**

* 根據(jù)文件前置查詢文件

*

* @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 二進(jìn)制流

*/

@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);

}

}

總結(jié)

以上是生活随笔為你收集整理的java中上传文件_Java中文件上传下载 --使用Minio的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。