IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> http接口上传下载文件(RestTemplate) -> 正文阅读

[网络协议]http接口上传下载文件(RestTemplate)


import com.guahao.convention.exception.ServiceException;
import com.guahao.csb.biz.core.utils.Assert;
import com.guahao.csb.biz.manager.config.KanoProperties;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author 
 * @version V1.0
 * @since 2021/9/2 18:01
 */
@Slf4j
@Service
public class KanoFileHelper {
    @Resource
    private RestTemplate restTemplate;
    @Autowired(required = false)
    private KanoProperties kanoProperties;

    public String uploadImplementationFile(MultipartFile file) throws IOException {

        // http header
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
        params.add("orginFileName", file.getOriginalFilename());
        params.add("bizCode", KanoProperties.BIZ_IMPLEMENTATION);
        String signStr = params.entrySet().stream()
                .sorted(Map.Entry.comparingByKey())
                .map(e -> e.getKey() + "=" + e.getValue().iterator().next())
                .collect(Collectors.joining("&")) + kanoProperties.getSignKey();
        String sign = DigestUtils.md5Hex(signStr.getBytes(StandardCharsets.UTF_8));
        params.add("sign", sign);

        // 构建文件的 multi request
        HttpHeaders bodyHeader = new HttpHeaders();
        MediaType mediaType = MediaType.parseMediaType(file.getContentType());
        bodyHeader.setContentType(mediaType);
        bodyHeader.setContentDispositionFormData("file", file.getOriginalFilename());
        HttpEntity<byte[]> bodyEntity = new HttpEntity<>(file.getBytes(), bodyHeader);
        // 文件数据
        params.add("file", bodyEntity);
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(params, headers);
        Map<String, Object> res = restTemplate.postForObject(kanoProperties.getUploadUrl(), httpEntity, Map.class);
        log.info("res {}", res);
        Integer code = (Integer) res.get("code");
        String message = (String) res.get("message");
        Assert.isTrue(Integer.valueOf(0).equals(code), StringUtils.isBlank(message) ? "文件上传失败!" : message);

        //noinspection unchecked
        Map<String, String> kanoResult = (Map<String, String>) res.get("data");
        return kanoProperties.getViewUrl() + "/" + kanoResult.get("kanoFileId")
                + "?token=" + kanoResult.get("token")
                + "&v=1.0&fileName=" + file.getOriginalFilename();
    }

    /**
     * 从kano文件转成base64编码字符串
     * @param kanoUrl
     * @return
     */
    public String getBase64FromUrl(String kanoUrl) {
        byte[] file = downloadFile(kanoUrl);
        return Base64.getEncoder().encodeToString(file);
    }

    public byte[] downloadFile(String kanoUrl) {
        Assert.hasText(kanoUrl, "文件url 不能为空");
        try {
            ResponseEntity<byte[]> responseEntity = restTemplate.getForEntity(kanoUrl, byte[].class);
            return responseEntity.getBody();
        } catch (Exception ex) {
            throw new ServiceException("", "获取kano文件异常");
        }
    }


}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:59:31  更:2021-11-09 20:00:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 21:18:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码