从当前服务器读取文件并发送到指定服务器


import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;

/**
 * * @date 2023/10/13
 */
public class DemoUtils {

    @Resource
    RestTemplate restTemplate;

    //当前服务器文件所属路径
    @Value("${sourceFile}")
    private String sourceFile;

    //指定服务器保存的路径
    @Value("${targetFile}")
    private String targetFile;

    //指定服务器的地址
    @Value("${service_url}")
    private String service_url;


    //本地服务器发送文件
    @RequestMapping("/upload")
    public String getUpload() {

//        将 本地文件 -->  字节数组 -->  字节数组资源
        File file = new File(sourceFile);
        byte[] bytesFile = null;
        try {
            bytesFile = FileUtils.readFileToByteArray(file);
        } catch (IOException e) {
            e.printStackTrace();
        }

//            必须重写该方法,否则服务器MultipartRequest.getFile获取文件为空,
//            但是return的变量名 作SubmittedFileName(可自定义),并非做接收端按键
//            取值时的文件的键名
//            即上传的文件具有两个名字: 键名 和 提交的文件名SubmittedFileName
        ByteArrayResource byteArrayResource = new ByteArrayResource(bytesFile) {
            @Override
            public String getFilename() {
                return "xxxxx";
            }
        };


//        httpRequest body
        MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<>();

        paramsMap.add("file", byteArrayResource);
        paramsMap.add("fileName", file.getName());

        String url = service_url + "/receive";
        String msg = restTemplate.postForObject(url, paramsMap, String.class);
        return msg;
    }


//接收文件的服务器接口

    /**
     * 以注解的形式获取请求中携带的参数
     *
     * @param file
     * @param fileName
     * @return
     */
    @RequestMapping("/receive")
    public String receive(@RequestParam("file") MultipartFile file,
                          @RequestParam("fileName") String fileName) {

        String msg = null;
//        获取传递的参数
        byte[] bytesFile = null;
        try {
            if (file == null) {
                throw new RuntimeException("接收的文件为空!");
            }
            if (fileName == null) {
                throw new RuntimeException("接收的文件名为空!");
            }
            bytesFile = file.getBytes();
        } catch (Exception e) {
            e.printStackTrace();
        }

//        字节数组 --> 本地文件
        String filePath = targetFile + fileName;
        File receiveFile = new File(filePath);
        try {
            FileUtils.writeByteArrayToFile(receiveFile, bytesFile);
            System.err.println("创建本地文件成功 -- 方式2");
            msg = "succ";
        } catch (Exception e) {
            msg = "fail";
            e.printStackTrace();
        }
        return msg;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容