java - 在 Spring MVC 5 中使用 MultipartFile 总是返回 null
问题描述
我无法将图像上传到服务器中的特定目录。multipartfile 变量始终为空,这是我的代码
配置 Bean
@Bean
public CommonsMultipartResolver multipartResolver()
{
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
return resolver;
}
领域类
private MultipartFile producImage;
public MultipartFile getProductImage() {
return producImage;
}
public void setProducImage(MultipartFile producImage) {
this.producImage = producImage;
}
控制器类
@RequestMapping(value = "/products/add", method = RequestMethod.POST)
public String processAddNewProductForm(@ModelAttribute("newProduct") Product newProduct, BindingResult result, HttpServletRequest request)
{
String[] suppressedFields = result.getSuppressedFields();
if(suppressedFields.length > 0)
{
throw new RuntimeException("Attempting to bind disallowed fields " + StringUtils.arrayToCommaDelimitedString(suppressedFields));
}
// productImage always receive null value !!!!!!
MultipartFile productImage = newProduct.getProductImage();
String rootDirectory = request.getSession().getServletContext().getRealPath("/");
if(productImage != null && !productImage.isEmpty())
{
try
{
productImage.transferTo(new File(rootDirectory + "resources\\images\\" + newProduct.getProductId() + ".png"));
}
catch(Exception ex)
{
throw new RuntimeException("Product Image Saving failed", ex);
}
}
productService.addProduct(newProduct);
return "redirect:/market/products";
}
前端:addproduct.jsp
<form:form method="POST" modelAttribute="newProduct" class="form-horizontal" enctype="multipart/form-data">
<fieldset>
<legend>Add New Product</legend>
<div class="form-group">
<label class="control-label col-lg-2" for="productImage">
<spring:message code="addProduct.form.productImage.label" />
</label>
<div class="col-lg-10">
<form:input id="productImage" path="productImage" type="file" class="form:input-large" />
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<input type="submit" id="btnAdd" class="btn btn-primary" value ="Add"/>
</div>
</div>
</fieldset>
</form:form>
我不知道为什么不工作。提前感谢您的帮助
解决方案
您必须初始化 MultipartFilter 类型的 bean 并设置多部分解析器,使 Spring 能够处理包含文件的请求:
@Bean
public MultipartFilter multipartFilter(){
MultipartFilter multipartFilter = new MultipartFilter();
multipartFilter.setMultipartResolverBeanName("multipartResolver");
return multipartFilter;
}
推荐阅读
- flutter - 未处理的异常:NoSuchMethodError:在 null 上调用了方法“add”
- git - `git checkout -- foo.txt` 和 `git checkout foo.txt` 的区别
- statistics - 为什么在运行神经网络模型时出现此错误?
- mule - 带有 Open JRE 11 的 Mule4 - 添加附加文件 module-info.java?
- python - 优化/加速应用的自定义功能到熊猫滚动功能
- python - 在同一行打印随机整数和短语?
- python - 每月每一天的子图,按月分组,X 轴按小时分组
- python - 枕头:如何用底层图像的反色绘制文本?
- regex - 命令中的 ansible regex_replace
- ffmpeg - FFmpeg - 最大高度(裁剪)