栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

新版Minio的网络上传和下载(Java通过浏览器上传,下载)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

新版Minio的网络上传和下载(Java通过浏览器上传,下载)

之前的写过了基本的本地文件上传,这次讲一下如何在从网络中获取文件流再上传到minio中。

百度很多案例都是老版本的,新版Api已经更新,不适用。 前端传文件过来后端都是通过MultipartFile格式来接收。

上传到minio中

@PostMapping("/upload")
public AjaxResult uploadFile(MultipartFile file){
       try{
            // 上传的文件路径
        return  fileService.upload(file);
        }catch (Exception e){
            return AjaxResult.error(e.getMessage());
        }
}
	@Override
public AjaxResult upload(MultipartFile file) {
		InputStream inputStream = null;
		//创建Minio的连接对象
		MinioClient minioClient = MinioClient minioClient =
				MinioClient.builder()
						.endpoint("http://"+"127.0.0.1"+":"+ "9000")
						.credentials("minioadmin","minioadmin")
						.build();
        //你的bucket名字
		String bucketName = "cxlong";
		try {
			inputStream = file.getInputStream();
			//判断文件存储的桶是否存在
			boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
			if (!found) {
				//如果桶不存在则创建通
				minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
			}
			//操作文件
			String fileName = file.getOriginalFilename();
            //防止文件名字重复2000/10/10当做文件的存储文件夹 uuid当文件名字
			String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "")
			+ fileName.substring(fileName.lastIndexOf("."));
			//文件上传
			//由于使用的是SpringBoot与之进行集成 上传的时候拿到的是MultipartFile 需要通过输入输出流的方式进行添加
			PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
					.bucket(bucketName)
					.contentType(file.getContentType())
					.stream(file.getInputStream(),file.getSize(),-1).build();
			minioClient.putObject(objectArgs);
			//封装访问的url给前端
            //前端需要文件名和文件的访问地址
			AjaxResult ajax = AjaxResult.success();
			ajax.put("fileName", "/"+bucketName+"/"+objectName);
			//url需要进行截取
			ajax.put("url", minioConfig.getEndpoint()+":"+ minioConfig.getPort()+"/"+ minioConfig.getBucketName()+"/"+fileName);
			return ajax;
		}catch(Exception e){
			e.printStackTrace();
			return AjaxResult.error("上传失败");
		}finally {
			//防止内存泄漏
			if (inputStream != null) {
				try {
					inputStream.close(); // 关闭流
				} catch (IOException e) {
					log.debug("inputStream close IOException:" + e.getMessage());
				}
			}
		}
	}

下面是上传之后预览的文件地址

下载
window.location.href = localhost+'/common/download?fileName=' + encodeURI('文件名.xlsx') + '&delete=' + false

@GetMapping("common/download")
    public AjaxResult fileDownload(String fileName, HttpServletResponse response, HttpServletRequest request){
        try{
            if (!FileUtils.checkAllowDownload(fileName)){
                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
            }
            return fileService.downloadByMinio(fileName,response);
        }catch (Exception e){
            log.error("下载文件失败", e);
            return AjaxResult.error(e.getMessage());
        }
    }
	@Override
	@SneakyThrows
	public AjaxResult downloadByMinio(String fileName,HttpServletResponse response) {
		try {
			MinioClient minioClient =
					MinioClient.builder()
							.endpoint("http://"+"127.0.0.1"+":"+ "9000")
							.credentials("minioadmin","minioadmin")
							.build();

			//你的bocket名字
			String bucketName = "cxlong";
			//判断文件存储的桶是否存在
			boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
			//获取下载路径
			String url = null;
			if (found) {
				 url = minioClient.getPresignedObjectUrl(
								GetPresignedObjectUrlArgs.builder()
										.method(Method.GET)
										.bucket(bucketName)
										.object(fileName)
										.expiry(2, TimeUnit.HOURS)
										.build());
			}


			//miniUtil.downloadFile(bucketName, fileName, "clues.xlsx", response);
			//获取文件数据对象

			StatObjectResponse statObjectResponse =
					minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(fileName).build());
//			//以流的形式获取一个文件对象
			InputStream stream = null;
			if (statObjectResponse != null && statObjectResponse.size() > 0) {
				stream = minioClient.getObject(
						GetObjectArgs.builder()
								.bucket(bucketName)
								.object(fileName)
								.build());
			}
			String filename = new String(fileName.getBytes("ISO8859-1"), StandardCharsets.UTF_8);
			if (StringUtils.isNotEmpty("clues.xlsx")) {
				fileName = "clues.xlsx";
			}
			response.setHeader("Content-Disposition", "attachment;filename=" + filename);
			ServletOutputStream servletOutputStream = response.getOutputStream();
			int len;
			byte[] buffer = new byte[1024];
			while ((len = stream.read(buffer)) > 0) {
				servletOutputStream.write(buffer, 0, len);
			}
			servletOutputStream.flush();
			stream.close();
			servletOutputStream.close();
			AjaxResult ajax = AjaxResult.success();
			ajax.put("fileName", fileName);
			ajax.put("url", url);
			return ajax;
		}catch (Exception e) {
			return AjaxResult.error(e.getMessage());
		}
	}

通过文件流传给前端浏览器进行下载,你也可以直接复制url到浏览器中进行测试下载。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号