【发布时间】:2014-08-13 12:56:44
【问题描述】:
我正在尝试使用以下代码在线上传图片。但是,由于某种原因,图像似乎没有在图像文件夹中创建。不确定,我在这里做错了什么。
@RequestMapping(value="/add", method=RequestMethod.POST)
public String processAddNewProductForm(@ModelAttribute("newProduct") Product productToBeAdded, BindingResult result, HttpServletRequest request) {
String[] supressedFields = result.getSuppressedFields();
if(supressedFields.length > 0) {
throw new RuntimeException("Attempting to bind disallowed fields: " + StringUtils.arrayToCommaDelimitedString(supressedFields));
}
MultipartFile productImage = productToBeAdded.getProductImage();
String rootDirectory = request.getSession().getServletContext().getRealPath("/");
if (productImage!=null && !productImage.isEmpty()) {
try {
productImage.transferTo(new File(rootDirectory+"resources\\images\\"+ productToBeAdded.getProductId() + ".png"));
} catch (Exception e) {
throw new RuntimeException("Product Image saving failed", e);
}
}
productService.addProduct(productToBeAdded);
return "redirect:/products/";
}
dispatcherservlet
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10240000" />
</bean>
Product.java
public class Product {
private String productId;
private String name;
private BigDecimal unitPrice;
private String description;
private String manufacturer;
private String category;
private long unitsInStock;
private long unitsInOrder;
private boolean discontinued;
private String condition;
private MultipartFile productImage;
public Product() {
super();
}
public Product(String productId, String name, BigDecimal unitPrice) {
this.productId = productId;
this.name = name;
this.unitPrice = unitPrice;
}
// add setters and getters for all the fields here
public MultipartFile getProductImage() {
return productImage;
}
public void setProductImage(MultipartFile productImage) {
this.productImage = productImage;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(BigDecimal unitPrice) {
this.unitPrice = unitPrice;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public long getUnitsInStock() {
return unitsInStock;
}
public void setUnitsInStock(long unitsInStock) {
this.unitsInStock = unitsInStock;
}
public long getUnitsInOrder() {
return unitsInOrder;
}
public void setUnitsInOrder(long unitsInOrder) {
this.unitsInOrder = unitsInOrder;
}
public boolean isDiscontinued() {
return discontinued;
}
public void setDiscontinued(boolean discontinued) {
this.discontinued = discontinued;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
product.jsp
<div class="col-md-5"> <img src="<c:url value="/resources/images/${product.productId}.png"> </c:url>" alt="image" style="width: 100%" />
【问题讨论】:
-
你对你的配置什么也没说,你没有说你是否已经在应用程序的任何其他部分成功使用了 multipart,你甚至没有显示生成它的表单......配置错误可能是任何地方:阅读 Spring 参考手册,按照它进行工作配置,如果它不起作用,请再次询问。
-
您使用
MultipartResolver的什么实现(CommonsMultipartResolver或StandardServletMultipartResolver)?对于web.xml的最后一部分应该张贴。发布Product类和适当形式的代码也可能很有用。 -
确保运行程序的用户对包含图像的目录具有可写权限。还要检查该用户是否对该目录的所有父级具有可读/可执行权限。如果没有帮助,我建议在您的 IDE 中调试
MultipartFile.transferTo()方法。
标签: spring-mvc image-uploading