Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringMVC和hibernate将文件名存储在数据库中,而不是文件本身_Java_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java 使用SpringMVC和hibernate将文件名存储在数据库中,而不是文件本身

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, 我可以在数据库

我是spring的初学者,我正在使用SpringMVC4Hibernate和mysql创建一个项目。在这个项目中,用户将能够提交一个表格与他们的个人资料图片“意味着,我需要提交数据与图像文件”。我可以将文件作为blob存储在数据库中,但这不是一个好的做法,所以我尝试在数据库中只存储文件名

到目前为止我所做的: xml配置中的multipartviewresolver, (commons文件上传,commons io)在pom.xml中, 我正在使用servlet api 2.5, 我可以在数据库中上传图像文件

我将在显示代码后讨论我的问题

这是我的模型课

这是我的Html表单:

我知道这个错误的原因: 我在模型类中将image变量声明为字符串类型。我不应该将我的图像字段声明为字节数组[],因为在数据库中存储图像是不好的。事实上,我想在服务器中保存图像

问题依然存在: 如何在数据库中存储文件名而不是文件名? 如何检索发送到@modeldattribute(user)的多部分文件数据,以便将映像保存在服务器位置? 我的控制器保存方法应该添加什么?我需要一个向导

请帮帮我,我已经在网上徘徊了一个多星期,我无法解决这个问题。我只找到了byte array[]示例,这不是我想要的


谢谢

您需要将
图像
属性的类型更改为
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();
        }
    }