我有一个带有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*
这是处理此流程的正确方法吗?
答案 0 :(得分:0)
查看您的用例,您肯定应该集成AWS S3,以便为您遇到的灾难提供保障。
处理图像存储的野兽方式是什么?
我在考虑亚马逊S3。但问题是 - 它会是 难以调试,因为所有代码都将基于与之的交互 本地AWS环境,因此我无法在本地计算机上对其进行调试。任何 解决方案可能吗?如果没有这个,S3似乎是个不错的选择。
为此,如果您将S3与AWS SDK一起实施,那么您的调试问题就会出现。
其他小子问题:就目前而言,这是算法如何成像 上传:在发布表单上,有一个按钮来选择图像。 一旦选择了图像,它就会被发送到/ upload_image控制器和 上传到临时文件夹。然后,一旦用户提交了决赛 请求,图像从img_temp移动到images / created_item_id 是 它是处理这个过程的正确方法吗?
这个过程看起来很好,但是你可以做的另外一个更改就是启动一个cron作业,它将把这个路径images/*created_item_id*
中的图像复制到S3存储桶,以便你备份图像。