首页 > 解决方案 > 春季无法将pdf文件转换为字节[]

问题描述

我在将pdf文件转换为 abyte array以将其保存在数据库中时遇到问题。我收到以下错误:

“无法将 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile 类型的属性值转换为属性文件所需的类型 byte[];嵌套异常是 java.lang.IllegalArgumentException:无法转换 org.springframework.web 类型的值.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile 到属性文件 [0] 所需的类型字节:PropertyEditor [org.springframework.beans.propertyeditors.CustomNumberEditor] 返回 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile 类型的不适当值

我的代码:

-控制器

    @PostMapping("/recruitment")
public String addingNewCandidateToDataBase(@RequestParam MultipartFile file, @Valid @ModelAttribute("candidate") CandidateDTO candidateDTO, BindingResult result) throws IOException {
    if(result.hasErrors()){
        return "recruitment";
    }
    if(candidateDTO.getAgreement() == null){
        result.rejectValue("agreement", null, "Aby aplikować musisz wyrazić zgodę.");
        return "recruitment";
    }
    if(!file.getOriginalFilename().endsWith("pdf")){
        result.rejectValue("file", null, "Plik musi posiadać rozszerzenie .pdf!");
        return "recruitment";
    }
    candidateDTO.setContentType(file.getContentType());
    candidateDTO.setFile(file.getBytes());
    candidateDTO.setFileName(file.getName());
    candidateService.creatingNewCandidate(candidateDTO);
    return "redirect/recruitment?complete";
}

jsp文件

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Recruitment</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<form:form enctype="multipart/form-data" modelAttribute="candidate" method="post">
<center>
    <c:if test="${param.complete != null}">
        <h1><p style="color: greenyellow">Twoje zgłoszenie zostało wysłane! Dziękujemy.</p></h1>
    </c:if>
    <h1>Dane kandydata</h1></center>
<p><form:label path="firstName">Imię*</form:label></p>
<p><form:input path="firstName"/><form:errors path="firstName"/><form:errors path="lastName"/></p>
<br>

<p><form:label path="lastName">Nazwisko*</form:label></p>
<p><form:input path="lastName"/></p>
<br>

<p><form:label path="email">E-mail*</form:label><form:errors path="email"/></p>
<p><form:input path="email"/></p>
<br>

<p><form:label path="phoneNumber">Telefon komórkowy</form:label><form:errors path="phoneNumber"/></p>
<p><form:input path="phoneNumber"/></p>
<br>

<p><form:label path="experience">Czy posiadasz doświadczenie? Jeśli jak to ile i jakie.*</form:label><form:errors
        path="experience"/></p>
<p><form:textarea path="experience"/></p>
<br>

<p><form:label path="position">Na jakie stanowisko chcesz aplikować?*</form:label><form:errors path="position"/></p>
<p><form:input path="position"/></p>
<br>

<p><form:label path="file">CV*</form:label><form:errors path="file"/></p>
<p><form:input type="file" path="file"/> </p>
<br>

<center><h1>Dodatkowe pytania</h1></center>
<br>

<p><form:label path="whenIsReadyToStart">Od kiedy jesteś gotowy by zacząć pracę?</form:label><form:errors
        path="whenIsReadyToStart"/></p>
<p><form:input path="whenIsReadyToStart"/></p>
<br>

<p><form:label path="grossExpectation">Jakie są Twoje oczekiwania finansowe (brutto)?</form:label><form:errors
        path="grossExpectation"/></p>
<p><form:input path="grossExpectation"/></p>
<br>

<center><h2>Zgoda</h2></center>
<div class="form-group form-check">
    <form:checkbox path="agreement" value="${candidate.agreement}"/> ${candidate.agreement}
</div>
    <br>
    <button type="submit" class="btn btn-primary">WYŚLIJ</button>
    </form:form>
<br>
</div>
</body>
</html>

标签: javaspringformsmultipart

解决方案


您可能缺少创建MultipartResolver.

MultipartResolverfrom org.springframework.web.multipartpackage 是一种解析多部分请求的策略,包括文件上传

要启用多部分处理,您需要MultipartResolverDispatcherServletSpring 配置中声明一个名称为multipartResolver.

尝试在 Spring MVC beans 配置中添加以下内容

@Bean
public MultipartResolver multipartResolver() {
    return new StandardServletMultipartResolver();
}

推荐阅读