Как я могу загрузить файлы в Spring-интеграции? - PullRequest
1 голос
/ 28 июня 2019

Я хотел бы загрузить файл, но я все еще получаю «Не удалось преобразовать запрос: не найден подходящий HttpMessageConverter для ожидаемого типа [org.springframework.web.multipart.MultipartFile]» исключение

Как можно решить эту проблему?




    private RequestMapping createMappingFile(HttpMethod[] method, String... path) {
        RequestMapping requestMapping = new RequestMapping();
        requestMapping.setMethods(method);
        requestMapping.setConsumes(MediaType.MULTIPART_FORM_DATA_VALUE);
        requestMapping.setProduces(MediaType.APPLICATION_JSON_VALUE);
        requestMapping.setPathPatterns(path);
        return requestMapping;
    }

@Bean
    public IntegrationFlow httpPostFileUpload() {
        return IntegrationFlows.from(httpPostGateFileUpload())
                .channel("http.file.upload.channel").handle("fileEndpoint", "upload").get();
    }
    @Bean
    public MessagingGatewaySupport httpPostGateFileUpload() {
        // @RequestMapping
        HttpRequestHandlingMessagingGateway handler = new HttpRequestHandlingMessagingGateway();
        handler.setRequestMapping(createMappingFile(new HttpMethod[]{HttpMethod.POST}, "/api/file/upload"));
        handler.setStatusCodeExpression(fileParser().parseExpression("T(org.springframework.http.HttpStatus).BAD_REQUEST"));
        handler.setRequestPayloadType(ResolvableType.forClass(MultipartFile.class));
        handler.setHeaderMapper(fileHeaderMapper());
        return handler;
    }

FileEndpoint:

 public Message<?> upload(Message<MultipartFile>msg) {

        MultipartFile file = msg.getPayload();

        UserDetails loggedUser = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        Optional<User> opUser = userRepository.findByUsername(loggedUser.getUsername());

        User user = opUser.orElseThrow(()->new ResponseStatusException(HttpStatus.NOT_FOUND,"User not found"));

        long date = new Date().getTime();

        File convertFile = new File(resourcePath+date+"_"+file.getOriginalFilename());
        try {
            FileOutputStream fout = new FileOutputStream(convertFile);
            fout.write(file.getBytes());
            fout.close();
...

Я запихну файл в каталог. Исключение:


org.springframework.messaging.MessagingException: Could not convert request: no suitable HttpMessageConverter found for expected type [org.springframework.web.multipart.MultipartFile] and content type [multipart/form-data;boundary=--------------------------525212308988156732836650;charset=UTF-8]
    at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.extractRequestBody(HttpRequestHandlingEndpointSupport.java:513) ~[spring-integration-http-5.1.6.RELEASE.jar:5.1.6.RELEASE]
    ```

1 Ответ

0 голосов
/ 28 июня 2019

Пожалуйста, прочитайте Справочное руководство по этому вопросу:

Входящая конечная точка HTTP находит MultipartResolver в контексте, если у одного есть имя компонента multipartResolver (то же самое имя, ожидаемое Spring * DispatcherServlet). Если он обнаруживает этот bean-компонент, поддержка многокомпонентных файлов включается в преобразователе входящих запросов. В противном случае происходит сбой при попытке сопоставить многокомпонентный файл с сообщением интеграции Spring. Подробнее о поддержке Spring для MultipartResolver см. В справочном руководстве Spring.

Существует также пример поддержки multipart .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...