当前位置: 首页 > 知识库问答 >
问题:

Springboot上载所需文件请求部分“文件”不存在

严令秋
2023-03-14

我正在尝试将图像作为广告中的字符串字段上传,但当将文件添加到正文时,我遇到了这个错误:“异常”:“org.springframework.web.multipart.support.MissingServletRequest estPartException”,“消息”:“所需的请求部分'file'不存在”。我在这里寻找有关此问题的答案,但没有任何帮助。我将很高兴得到任何帮助。

我的控制器:

    @Controller
    @RequestMapping("/adverts")
    public class AdvertController {

    private AdvertService advertService;
    private FileUploadService fileUploadService;

    public AdvertController(AdvertService advertService, FileUploadService fileUploadService) {
        this.advertService = advertService;
        this.fileUploadService = fileUploadService;
    }

    @GetMapping("/showFormForAdd")
    public String showFormForAdd(MultipartFile file, Model theModel) throws IOException {

        Advert theAdvert = new Advert();
        theModel.addAttribute("advert", theAdvert);

        return "adverts/advert-form";
    }    

    @PostMapping("/save")
    public String saveAdvert(@RequestParam("file") MultipartFile file,
                             @AuthenticationPrincipal Account user,
                             @Valid @ModelAttribute("advert") Advert theAdvert,
                             BindingResult bindingResult) throws IOException {

        if (bindingResult.hasErrors()) {
            return "adverts/advert-form";
        } else {

            String filepath = fileUploadService.upload(file);
            theAdvert.setFilename(filepath);

            advertService.save(user, theAdvert);
        }
        return "redirect:/adverts/list";
    }
  }

我的服务:


@Service
public class FileUploadServiceImpl implements FileUploadService {

    private String UPLOADED_FOLDER = "/images/";
@Override
    public String upload(MultipartFile file) {
        System.out.println(file);
        if(file.isEmpty())
            return null;

        String fileName = null;
        try {
            fileName =  generateFileName(Objects.requireNonNull(file.getOriginalFilename()));

            byte[]bytes = file.getBytes();
            Path path = Paths.get(UPLOADED_FOLDER + fileName);
            Files.write(path, bytes);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return "/resources/" + fileName;
    }

    private String generateFileName(String file){
        String ext = file.substring(file.lastIndexOf("."));
        return System.currentTimeMillis() + ext;
    }
}

我的输入HTML表单:

<!DOCTYPE HTML>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">

</head>

<body>

<div class="container">

    <h3>Объявления о продаже недвижимости</h3>
    <hr>

    <p class="h4 mb-4">Добавить новое объявление в систему</p>

    <form action="#" th:action="@{/adverts/save}"
          th:object="${advert}" method="POST" enctype="multipart/form-data">


        <!-- Add hidden form field to handle update -->
        <input type="hidden" th:field="*{id}" />

        <input type="text" th:field="*{title}"
               class="form-control mb-4 col-4" placeholder="Название"/>
            <p th:if="${#fields.hasErrors('title')}" th:errors="*{title}" class="alert alert-danger col-4" >Title Error</p>

        <input type="file" name="file_upload"
               class="form-control mb-4 col-4" placeholder="Изображение">

<!--        <input type="file" name="file"/>-->
<!--        <input type="hidden" class="form-control" th:field="*{photo}" placeholder="Enter Image"/>-->

        <input type="text" th:field="*{price}"
               class="form-control mb-4 col-4" placeholder="Цена">
        <p th:if="${#fields.hasErrors('price')}" th:errors="*{price}" class="alert alert-danger col-4" >Price Error</p>

        <input type="text" th:field="*{description}"
               class="form-control mb-4 col-4" placeholder="Описание">
        <p th:if="${#fields.hasErrors('description')}" th:errors="*{description}" class="alert alert-danger col-4" >Description Error</p>

        <button type="submit" class="btn btn-info col-2">Добавить</button>

    </form>

    <a th:href="@{/adverts/list}">Назад к списку объявлений</a>

</div>
</body>

</html>

共有1个答案

景元徽
2023-03-14

改变

<input type="file" name="file_upload" class="form-control mb-4 col-4" placeholder="Изображение">

<input type="file" name="file" class="form-control mb-4 col-4" placeholder="Изображение">

您的控制器需要一个参数文件,但您正在从html发送file_upload。这就是为什么Spring显示错误消息“所需的请求部分'file'不存在”

 类似资料:
  • 我有一个执行文件上传的控制器,我正在尝试从另一个服务向控制器endpoint发布请求。 从我调用上述endpoint的位置发送代码 我得到以下错误,不知道原因: 已经四处寻找了一段时间,没有解决方案。

  • 我正在开发一个文件上传控制器,目前在Postman中测试时出现以下错误。 目前我的控制器非常简单,但首先我需要克服这个问题。 我已经查看了[此处]给出的答案(上传文件springboot必需的请求部分“file”不存在“上传文件springboot必需的请求部分文件不存在”)! 但不幸的是,这里的建议并没有解决我的问题 如果您能帮助解决此错误,我们将不胜感激 这是我的控制器:

  • 我在客户端中有以下代码: 这个代码就是你所说的上面的代码: 它在服务器上给我的错误:已解决[org.springframework.web.multipart.support.MissingServletRequestPartException:所需的请求部分“file”不存在] 它在客户端给我的错误:org.springframework.web.client.HttpClientErrorEx

  • 尝试测试上载文件时,获取此“文件”不存在错误,但控制器在测试之外工作良好。文件不在这里有什么原因吗? 控制器 控制器测试

  • 我试图使用Angular 4.0和SpringBoot应用程序上传一个json文件。我已经检查并尝试了Stackoverflow的其他解决方案,但我无法找出确切的问题是什么。 我收到400 BAD Request Error消息,其中包含消息:不存在所需的请求部分“文件”。 我的RestController看起来像这样(出于测试目的),但不幸的是什么也没发生。 我在应用程序配置文件中添加了以下内容

  • 我一直在看这个,但似乎我的问题在别处。我试图上传一个文件。当前定义为: 上传过程如下: 而这是Spring REST终结点: 问题是,Spring抛出了一个异常,告诉我参数不存在: 这是请求信息: 我怎样才能使这个文件上传工作?