将图像文件保存在Web应用程序中,java

时间:2018-05-16 08:30:53

标签: sql angularjs spring hibernate java-ee

  

在我的网络应用程序中,我想允许"客户端用户"上传大量图像文件,以及"客户端用户"必须能够看到上传图像文件的网格。

在这种情况下,所有图像文件都有权上传,阅读,删除和编辑操作。

基本上我使用的是java技术,但我有点怀疑,

  • 进行这种巨大的图像文件管理最安全有效的方法是什么?
  • 什么是最适合的技术堆栈,可以在这种Web应用程序中使用?

1 个答案:

答案 0 :(得分:0)

转到此repository并转到display-image-from-db分支。基本方法如下:

  • 在您拥有的实体中:

    @Lob
    private Byte[] image;
    
  • ImageController.java - 您通过MultipartFile

    获取图片
    @PostMapping("recipe/{id}/image")
    public String handleImagePost(@PathVariable String id, @RequestParam("imagefile") MultipartFile file){
    
        imageService.saveImageFile(Long.valueOf(id), file);
    
        return "redirect:/recipe/" + id + "/show";
    }
    
  • 调用imageService保存通过file作为参数的图片。

  • 该服务基本上将图像内容复制到字节数组,最后将此字节数组分配给您的实体。

    @Override
    @Transactional
    public void saveImageFile(Long recipeId, MultipartFile file) {
    
    try {
        Recipe recipe = recipeRepository.findById(recipeId).get();
    
        Byte[] byteObjects = new Byte[file.getBytes().length];
    
        int i = 0;
    
        for (byte b : file.getBytes()){
            byteObjects[i++] = b;
        }
    
        recipe.setImage(byteObjects);
    
        recipeRepository.save(recipe);
    } catch (IOException e) {
        //todo handle better
        log.error("Error occurred", e);
    
        e.printStackTrace();
    }
    }
    

对于完整的源代码,请转到repo,这肯定会有所帮助。 但是我强烈建议将文件存储在磁盘上,而不是存储在数据库中。 DB应该只存储文件的路径。对于这样的解决方案,这里有一个例子:link

<强> TL; DR

  • 我强烈建议不要将数据存储在数据库本身,而是存储在文件系统中。 (例如:在文件夹中。)
  • guide可能也会有所帮助。
  • Here您找到了完整的RESTful实现。

干杯!