我正在尝试将图像作为广告中的字符串字段上传,但当将文件添加到正文时,我遇到了这个错误:“异常”:“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>
改变
<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抛出了一个异常,告诉我参数不存在: 这是请求信息: 我怎样才能使这个文件上传工作?