获取http的get或者post请求,返回文件流的处理方式记录,包含:file转MultipartFile、hutool工具包使用等方法

http请求url,返回的是文件流,怎么处理这个文件流方案

下面案例为,请求url后,返回文件流,然后处理完成后,上传到minio;

案例使用的是hutool工具包,请导入相关maven依赖;

import java.nio.file.Files;
import java.nio.file.Path;

public String downloadAndSaveMini() throws Exception {
        String url = "https://xxxxxx.aaaaa.cn/open/api/cps/v1/download/";

        HttpRequest get = HttpUtil.createGet(url);
        //设置请求头,按照业务需求设置即可
        get.header(Header.CONTENT_TYPE, "application/json");
        get.header("Wps-Docs-Date", "2024-xx-xx-xx");
        get.header("Wps-Docs-Authorization", "qwerqwerasdfasdfzxcvzxcv");
        get.header("route-key", "885625as");

        //发出请求,返回数据
        HttpResponse execute = get.execute();

        //通过 completeFileNameFromHeader 方法返回一个文件流
				//FileUtil.file("") 方法是hutoll工具包中的方法 
				//输入空字符串,自动返回一个绝对路径;
				//这里也可以使用 writeBodyForFile 方法,那么可以查看下载进度
        File file = execute.completeFileNameFromHeader(FileUtil.file(""));
//			  File file1 = get.execute().writeBodyForFile(FileUtil.file(""), new StreamProgress() {
//            @Override
//            public void start() {
//                System.out.println("开始下载");
//            }
//
//            @Override
//            public void progress(long progressSize) {
//                System.out.println("下载进度,文件大小:" + progressSize);
//            }
//
//            @Override
//            public void finish() {
//                System.out.println("结束下载");
//            }
//        });

				//请求返回的数据转byte数组,用于后面转 MultipartFile
        byte[] bytes = execute.bodyBytes();

				//获取文件流的类型
        Path path = file.toPath();
        String contentType = Files.probeContentType(path);

        System.out.println("文件名字:" + file.getName().toLowerCase(Locale.ROOT));
        System.out.println("文件大小:" + file.length());

				//返回的文件流名字是中文那么已经是decode编码的,所以需要解码
				//这一步按照具体的URL下载文件情况而定
        String decode = URLDecoder.decode(file.getName(), StandardCharsets.UTF_8);
        System.out.println("解码后的文件名:" + decode);

				//通过 MockMultipartFile 方法转 MultipartFile
				//参数1:文件名:
				//参数2:文件名;
				//参数3:文件类型
				//参数4:文件流byte数组
        MultipartFile downloadFile = new MockMultipartFile(decode, decode, contentType, bytes);

        System.out.println("转换后的文件名:" + downloadFile.getOriginalFilename());
        System.out.println("转换后的文件名:" + downloadFile.getName());
        System.out.println("转换后的文件大小:" + downloadFile.getSize());
        System.out.println("转换后的文件类型:" + downloadFile.getContentType());

				//这里是调用minio的方法进行文档上传,自行按照自己的业务逻辑来上传或者保存文档即可;
        String minioDownloadUrl = minioUtil.minioUploadImg(downloadFile);

        System.out.println("Minio的文档下载地址为:" + minioDownloadUrl);


				//如果是直接请求url下载文件,没有请求头等信息,
				//可以直接使用hutool工具包的 downloadxxxxx()方法
        //使用hutool工具下载文件
//        byte[] bytes = HttpUtil.downloadBytes("https://litedoc02.wpseco.cn/open/api/demo/v1/file/013ab1d04c5b424c4576ec4d4ff6bbd558b3e074f24a/version/-1/download");
//        File file = HttpUtil.downloadFileFromUrl("https://litedoc02.wpseco.cn/open/api/demo/v1/file/013ab1d04c5b424c4576ec4d4ff6bbd558b3e074f24a/version/-1/download", FileUtil.normalize(""));
//        MultipartFile downloadFile = new MockMultipartFile("test001.docx", bytes);
//        System.out.println("文件名字:"+downloadFile.getName());
//        System.out.println("文件大小:"+downloadFile.getSize());
//
//        System.out.println("文件名字:" + file.getName().toLowerCase(Locale.ROOT));
//        System.out.println("文件大小:" + file.length());

        return "OK";
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值