spring - Multipart/formdata 文件类型字段总是获取一些数据,即使它是一个可选字段
问题描述
我无法理解,为什么可选文件字段总是取一些多部分值,即使我没有选择任何文件。
场景是,我正在制作一个用户可以发送电子邮件的屏幕,它具有可选的附件字段。
@PostMapping(value = "email", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String sendEmail(@RequestParam String retailers,
@RequestParam(name="selected-retailer", required = false) List<String> selectedRetailer,
@RequestParam(name="individual-email", required = false) String individualEmail,
@RequestParam String subject,
@RequestParam String message,
@RequestParam(required = false, name = "documents") MultipartFile documents) {
文件总是有价值的。
文件:可选[org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile@4668b691]
调试时显示,它不包含任何名称。
这是日志跟踪,可能会有用。提前致谢。
java.nio.file.AccessDeniedException: E:\Spring Projects\proofreader\CementSchemes\uploads
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:89)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:231)
at java.base/java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:478)
at java.base/java.nio.file.Files.newOutputStream(Files.java:219)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile.transferTo(StandardMultipartHttpServletRequest.java:270)
at com.hubrootsolutions.cementschemes.messaging.MessagingController.sendEmail(MessagingController.java:98)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
解决方案
用于MultipartFile.isEmpty()
查看是否选择了实际文件:
来自 Javadoc:
/**
* Return whether the uploaded file is empty, that is, either no file has
* been chosen in the multipart form or the chosen file has no content.
*/
boolean isEmpty();
推荐阅读
- ios - 水平向 UIStackView 添加两个按钮,一个覆盖另一个
- python - 阅读验证码语音并写入 excel 或记事本
- android - 如何使用 CardView 调整图像?
- .net - 无法提供静态文件 - DotNet Core 2.1 (MVC)
- vue.js - Vue JS 胖箭头方法不绑定 Vue 实例
- php - Codeigniter:实现搜索功能
- python - 如何使用多个 IF 语句 Python 迭代效率更高
- scala - 通过 RDD 计算文本文件中每个国家/地区的单词
- vue.js - Vuetify Flex Layout - 没有填充高度
- sql - 请帮助sqlerror