在春天,冬眠和百里香项目上工作。我正在尝试将类别图像与数据库中的主项目链接,该数据库将附加项目的图像。我认为我需要做的是在我的服务文件夹中创建一个类别java类,一个类别存储库java接口和一个categoryServiceImpl实现java类。但这对我来说听起来不对。我试图在我的merchandise.java文件中添加一个额外的MultipartFile categoryImage,并将以下代码添加到我的控制器
Merchandise.java
@Entity
public class Merchandise {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String title;
private String size;
private String format;
private String screenSize;
private String category;
private double shippingWeight;
private double listPrice;
private double salePrice;
private boolean active=true;
@Column(columnDefinition="text")
private String description;
private int inStockNumber;
@Transient
private MultipartFile merchImage;
private MultipartFile categoryImage;
控制器
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addMerchandisePost(
@ModelAttribute("merchandise") Merchandise merchandise, HttpServletRequest request) {
merchandiseService.save(merchandise);
MultipartFile merchImage = merchandise.getMerchImage();
try {
byte[] bytes = merchImage.getBytes();
String name = merchandise.getId() + ".jpg";
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("src/main/resources/static/image/merch/" + name)));
stream.write(bytes);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
MultipartFile categoryImage = merchandise.getCategoryImage();
try {
byte[] bytes = categoryImage.getBytes();
String name = merchandise.getId() + ".jpg";
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("src/main/resources/static/image/category/" + name)));
stream.write(bytes);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:merchandiseList";
}
但那没用。我最终得到了异常:在类路径资源中定义名为'entityManagerFactory'的bean时出错。我不知所措。
答案 0 :(得分:0)
不要使用Web内容 - MultipartFile和实体。在实体中应该有Blob字段或byte [] wchih可以存储在DB中并检索回来。但实际上你根本不需要它。存储一个字符串 - 文件的路径。
不要使用实体来获取控制器中的数据。而是创建一个DTO(数据传输对象)一个普通的旧java对象,其中包含您需要从UI传递的所有字段。
BTW 异常:使用名称' entityManagerFactory'创建bean时出错类路径资源中定义的与发布的代码完全无关。你的弹簧配置有点不对劲。
发布完整的堆栈跟踪和你的弹簧配置以说明更多信息。
答案 1 :(得分:0)
与其他答案一样,它不适合将图像作为blob存储在DB中,而是存储在文件系统中的文件中,只是将该文件的路径存储为DB中的元数据。
至于你的错误,你需要在spring config类中配置multipart bean,即实现WebMvcConfigurerAdapter
的类
放下以下定义
// Bean name must be "multipartResolver", by default Spring uses method name
// as bean name.
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
添加以下导入
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;