Java 使用SpringMVC和hibernate将文件名存储在数据库中,而不是文件本身
我是spring的初学者,我正在使用SpringMVC4Hibernate和mysql创建一个项目。在这个项目中,用户将能够提交一个表格与他们的个人资料图片“意味着,我需要提交数据与图像文件”。我可以将文件作为blob存储在数据库中,但这不是一个好的做法,所以我尝试在数据库中只存储文件名 到目前为止我所做的: xml配置中的multipartviewresolver, (commons文件上传,commons io)在pom.xml中, 我正在使用servlet api 2.5, 我可以在数据库中上传图像文件 我将在显示代码后讨论我的问题 这是我的模型课 这是我的Html表单: 我知道这个错误的原因: 我在模型类中将image变量声明为字符串类型。我不应该将我的图像字段声明为字节数组[],因为在数据库中存储图像是不好的。事实上,我想在服务器中保存图像 问题依然存在: 如何在数据库中存储文件名而不是文件名? 如何检索发送到@modeldattribute(user)的多部分文件数据,以便将映像保存在服务器位置? 我的控制器保存方法应该添加什么?我需要一个向导 请帮帮我,我已经在网上徘徊了一个多星期,我无法解决这个问题。我只找到了byte array[]示例,这不是我想要的Java 使用SpringMVC和hibernate将文件名存储在数据库中,而不是文件本身,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我是spring的初学者,我正在使用SpringMVC4Hibernate和mysql创建一个项目。在这个项目中,用户将能够提交一个表格与他们的个人资料图片“意味着,我需要提交数据与图像文件”。我可以将文件作为blob存储在数据库中,但这不是一个好的做法,所以我尝试在数据库中只存储文件名 到目前为止我所做的: xml配置中的multipartviewresolver, (commons文件上传,commons io)在pom.xml中, 我正在使用servlet api 2.5, 我可以在数据库
谢谢您需要将
图像
属性的类型更改为org.springframework.web.multipart.commons.commons multipartfile
,而不是数组形式的字符串。
e、 g.private CommonsMultipartFile[]图像代码>
然后在控制器中使用user.getImage()
获取,它将返回类型为commonmultipartfile
的数组,对它进行迭代,并使用API获取CommonsMultipartFile
的图像详细信息,然后将图像存储到服务器。您需要将image
属性的类型改为org.springframework.web.multipart.commons.CommonsMultipartFile
,而不是字符串,后者将是数组。
e、 g.private CommonsMultipartFile[]图像代码>
然后在控制器中使用user.getImage()
获取,它将返回类型为commonmultipartfile
的数组,对其进行迭代,并使用API获取CommonsMultipartFile
图像详细信息,然后将图像存储到服务器。Rahul Yadav发布的答案应有助于解决此错误
最好将文件存储在服务器上的特定文件夹下。您可以使用用户id本身来命名文件。这意味着不需要显式地存储数据库中的文件名,因为您可以从id中派生文件名。
如果要存储多个文件,可以定义文件命名遵循的约定
假设您想添加用户照片,您可以将其保存在某个位置,例如/userPhotos/as:
/userPhotos/1.jpg
/userPhotos/2.jpg
如果要将多个文件关联到一个用户,可以为每个用户创建单独的文件夹
即
“Rahul Yadav”发布的答案应有助于解决错误
最好将文件存储在服务器上的特定文件夹下。您可以使用用户id本身来命名文件。这意味着不需要在数据库中显式存储文件名,因为您可以从id派生文件名。
如果要存储多个文件,可以定义文件命名遵循的约定
假设您想添加用户照片,您可以将其保存在某个位置,例如/userPhotos/as:
/userPhotos/1.jpg
/userPhotos/2.jpg
如果要将多个文件关联到一个用户,可以为每个用户创建单独的文件夹
即
我现在在做什么!!这是我的模型课
这是我的html表单
上传图像上传大小(1 mb)
还有我的控制器类
@RequestMapping(value=“/register”,method=RequestMethod.POST)
公共字符串saveUsers(HttpSession会话,@ModelAttribute(“用户”)@有效用户,BindingResult结果)抛出FileNotFoundException,IOException{
//正在从请求对象获取上载的文件
CommonsMultipartFile[]cMultFiles=user.getImagefile();
if(result.hasErrors()){
返回“用户/注册”;
}
否则{
//遍历多部分数组
for(CommonsMultipartFile多部分文件:cMultFiles){
//将文件保存到本地磁盘并在数据库中命名
setImage(saveFileToLocalDisk(multipartFile));
//保存用户
userService.saveUser(用户);
//创建sesion
List userlist=userService.createSession(user.getUsername(),user.getPassword());
迭代器用户列表(会话,用户列表);
}
//重定向
返回“重定向:/user/”+user.getUsername();
}
}
在我的模型类中,通过将数据库的varchar类型“image”映射到commonmultipartfile类型的image,我无法实现我想要的。所以我在我的模型类中将image类型保留为string,并使用commonmultipartfile类型创建了新字段,并使用@transient对其进行注释,这样它就不会被持久化。我在controller中获取了multipartfile,并使用user.setImage()将其名称存储在数据库中,并将其正常保存在本地存储中
谢谢大家的努力
我现在在做什么!!这是我的模型课
这是我的html表单
上传图像上传大小(1 mb)
还有我的控制器类
@RequestMapping(value=“/register”,method=RequestMethod.POST)
公共字符串存储用户(HttpSession)
@Controller
@RequestMapping(value="/user")
public class userController {
@Autowired
private UserService userService;
@RequestMapping(value="/register",method = RequestMethod.GET)
public String userRegister (Model model) {
model.addAttribute("user", new User());
return "user/register";
}
@RequestMapping(value="/register", method = RequestMethod.POST)
public String saveUsers (HttpSession session, @ModelAttribute("user") @Valid User user, BindingResult result) {
if (result.hasErrors()){
return "user/register";
}
else {
// saving user
userService.saveUser(user);
// creating sesion
List<User> userlist = userService.createSession(user.getUsername(), user.getPassword());
iteratorUserList(session, userlist);
// redirecting
return "redirect:/user/"+user.getUsername();
}
}
Failed to convert property value of type
[org.springframework.web.multipart.commons.CommonsMultipartFile]
to required type [java.lang.String] for property image; nested exception is
java.lang.IllegalStateException: Cannot convert value of type
[org.springframework.web.multipart.commons.CommonsMultipartFile] to required
type [java.lang.String] for property image: no matching editors or
conversion strategy found
/userPhotos/1.jpg
/userPhotos/2.jpg
/data/1/1.jpg
/data/2/2.jpg
/someOtherFile.eg
@Transient
private CommonsMultipartFile[] imagefile;
private String image;
// and their respective setter and getter
<li>Upload image <small>upload size (1 mb)</small></li>
<li>
<form:input type="file" class="fip" path="imagefile" />
<form:errors cssClass="error" path="imagefile" />
</li>
@RequestMapping(value="/register", method = RequestMethod.POST)
public String saveUsers (HttpSession session, @ModelAttribute("user") @Valid User user, BindingResult result) throws FileNotFoundException, IOException {
// Getting uploaded file from the request object
CommonsMultipartFile[] cMultFiles = user.getImagefile();
if (result.hasErrors()){
return "user/register";
}
else {
// Iterate through the multipart array
for (CommonsMultipartFile multipartFile : cMultFiles) {
// Save the file to local disk and name in database
user.setImage(saveFileToLocalDisk(multipartFile));
// saving user
userService.saveUser(user);
// creating sesion
List<User> userlist = userService.createSession(user.getUsername(), user.getPassword());
iteratorUserList(session, userlist);
}
// redirecting
return "redirect:/user/"+user.getUsername();
}
}