美文网首页
上传文件,以及通过 Feign 调用上传文件接口

上传文件,以及通过 Feign 调用上传文件接口

作者: 蓝笔头 | 来源:发表于2021-08-31 19:12 被阅读0次

    上传文件

    (1)工具类

    @UtilityClass
    public class MultipartFileUtils {
        private static final String FILE_DIR = "C:\\test";
        static {
            makeSurePathExists();
        }
    
        @SneakyThrows
        public static void saveFile(MultipartFile file) {
            // 使用 commons-io 依赖中的 FileUtils 工具类
            // SpringBoot 中已经包含了 commons-io 依赖
            FileUtils.copyInputStreamToFile(file.getInputStream(), newDestinationFile(file));
        }
    
        private static File newDestinationFile(MultipartFile file) {
            String fileName = FILE_DIR + File.separator + file.getOriginalFilename();
            return new File(fileName);
        }
    
        private static void makeSurePathExists() {
            File path = new File(FILE_DIR);
            if (!path.exists()) {
                path.mkdirs();
            }
        }
    }
    

    (2)定义接口

    @RestController
    @Slf4j
    @RequiredArgsConstructor
    public class ImageController {
        @PostMapping(value = "/image/upload")
        public String upload(@RequestParam("image") MultipartFile file) {
            log.info("fileName: {}, originalFilename:{}, contentType:{}, size:{}", file.getName(), file.getOriginalFilename(), file.getContentType(), file.getSize());
            MultipartFileUtils.saveFile(file);
            return "done";
        }
    }
    

    (3)调用 http://localhost:8080/image/upload 进行测试。

    在目标文件夹中会出现上传的文件。

    Feign 调用上传文件接口

    (1)定义一个 FeignClient

    @FeignClient(value = "image", url = "http://127.0.0.1:8080")
    public interface ImageClient {
        @PostMapping(value = "/image/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
        String upload(@RequestPart("image") MultipartFile file);
    }
    

    注意事项:

    • 使用 @RequestPart,而不是 @RequestParam
    • 添加 consumes = MediaType.MULTIPART_FORM_DATA_VALUE,其值为 "multipart/form-data"

    (2)调用上面定义的 FeignClient 接口。

        @SneakyThrows
        @GetMapping("/test")
        public void test() {
            FileInputStream inputStream = new FileInputStream("C:\\Users\\meikai\\Desktop\\QQ截图20210811101712.png");
            MultipartFile multipartFile = new MockMultipartFile("any", "originalFilename.png", null, inputStream);
            String result = imageClient.upload(multipartFile);
            log.info("upload result: {}", result);
        }
    

    (3)调用 http://localhost:8080/test 接口,控制台输出如下:

    2021-08-31 19:11:43.804  INFO 24284 --- [nio-8080-exec-6] c.e.demo.controller.ImageController      : fileName: image, originalFilename:originalFilename.png, contentType:image/png, size:3315
    2021-08-31 19:11:43.806  INFO 24284 --- [nio-8080-exec-5] c.e.demo.controller.ImageController      : upload result: done
    

    说明一切正常。

    参考

    相关文章

      网友评论

          本文标题:上传文件,以及通过 Feign 调用上传文件接口

          本文链接:https://www.haomeiwen.com/subject/uinziltx.html