Spring MVC app图像存储

时间:2016-07-16 13:42:20

标签: java spring spring-mvc amazon-web-services amazon-s3

我有一个带有AngularJS的Spring MVC应用程序用于前端,部署在AWS Elastic Beanstalk上。

我通过在应用程序中创建目录来存储图像 的例如:

    @RequestMapping(value="/upload_image", method=RequestMethod.POST)
    public @ResponseBody JsonResponse handleFileUpload(@RequestParam("file") MultipartFile file, @RequestParam("filename") String filename){
        if (!file.isEmpty()) {
            try {
                String orgName =file.getOriginalFilename();
                String filePath =  "img_temp";
                File dir = new File(filePath);
                if (!dir.exists())
                    dir.mkdirs();

                File serverFile = new File(dir.getAbsolutePath() + File.separator + orgName);

                //Format check
                if(!IsImage(serverFile)) {return new JsonResponse("FAIL","Is not an image: "+orgName);}

                //Upload
                try {
                    file.transferTo(serverFile);
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                    return new JsonResponse("FAIL","File uploaded failed: "+orgName);
                }
                catch (IOException e) {
                    e.printStackTrace();
                    return new JsonResponse("FAIL","File uploaded failed: "+orgName);
                }

                //Success
                return new JsonResponse("OK","");

            } catch (Exception e) {
                return new JsonResponse("FAIL","File uploaded failed: "+file.getName() + " => " + e.getMessage());
            }
        } else {
            return new JsonResponse("FAIL","File uploaded failed: "+ file.getName() + " because the file was empty.");
        }
    }

该应用程序是某种分类广告。 图像存储有两个主要用途:项目图像(公开可用)和临时项目图像(不公开,但也不需要任何特殊安全性)

问题: 很明显,这种图像存储方式非常不稳定。 第一个问题 - 每次我部署我的应用程序的.war文件时,我必须手动备份图像文件夹,然后复制到已部署的应用程序。 今天,由于高负载,弹性beanstalk实例终止并创建了新的。所有图像都丢失了。所以,一定要处理它。

问题:

处理图像存储的野兽方式是什么?

我在考虑亚马逊S3。但问题是 - 它将很难调试,因为所有代码都将基于与本地AWS环境的交互,因此我无法在本地计算机上对其进行调试。对此有什么解决方案吗?如果没有这个,S3似乎是个不错的选择。

其他小问题: 目前,这是图像上传的算法: 在发布表单上,有一个用于选择图像的按钮。一旦选择了图像,它就会被发送到/upload_image控制器并上传到临时文件夹中。然后,一旦用户提交最终请求,图片就会从img_temp移至images/*created_item_id* 这是处理此流程的正确方法吗?

1 个答案:

答案 0 :(得分:0)

查看您的用例,您肯定应该集成AWS S3,以便为您遇到的灾难提供保障。

  

处理图像存储的野兽方式是什么?

     

我在考虑亚马逊S3。但问题是 - 它会是   难以调试,因为所有代码都将基于与之的交互   本地AWS环境,因此我无法在本地计算机上对其进行调试。任何   解决方案可能吗?如果没有这个,S3似乎是个不错的选择。

为此,如果您将S3与AWS SDK一起实施,那么您的调试问题就会出现。

  

其他小子问题:就目前而言,这是算法如何成像   上传:在发布表单上,有一个按钮来选择图像。   一旦选择了图像,它就会被发送到/ upload_image控制器和   上传到临时文件夹。然后,一旦用户提交了决赛   请求,图像从img_temp移动到images / created_item_id 是   它是处理这个过程的正确方法吗?

这个过程看起来很好,但是你可以做的另外一个更改就是启动一个cron作业,它将把这个路径images/*created_item_id*中的图像复制到S3存储桶,以便你备份图像。