我想在文件系统中的spring mvc上传图片。我可以这样做,但在重新部署项目时,所有图像都从目录中删除。现在我的问题是如何永久上传图片?我想在实际应用中使用它。
答案 0 :(得分:0)
您可能已将图像上传到项目目录/ war下。每次部署/构建项目/战争时,图像都会被删除。
您需要将图像文件保存在项目/战争之外。
对于实际应用,我建议您至少在单独的服务器中保存/提供上传的图像。亚马逊S3是一个非常好的。您只需将对象/文件名相对于S3基本URL存储在数据库中即可。他们也有java API供您上传文件。
答案 1 :(得分:0)
如上所述,为了保留这些上传的图像,最好将它们保存在项目/ .WAR文件之外。这样做的原因是您已经体验过,每次重新部署应用程序时,您将丢弃在部署之前写入上一个项目/ .WAR的任何内容(即上传的图像)。
使用Amazon S3存储桶保存这些图像的解决方案是一个很好的解决方案,您绝对可以实现您的目标(使用www.example.com/upload/的URL显示所有这些图像)。使用控制器中的springMVC,您可以设置方法并分配@RequestMapping注释,如下所示:
@Controller
@RequestMapping("/") //this can map to your www.example.com
public class MainController(){
@RequestMapping("/upload") //this will then map to www.example.com/upload
public String showUploads(){
return "redirect:http://pathToAmazonS3Bucket"
}
}
在SpringMVC中,重定向允许您重定向到绝对URL路径。 See docs
但是如前所述,您仍然必须在项目路径/ WAR文件之外的某处托管您的图像。 Amazon S3可以运行,但是由于您要求提供另一种解决方案,因此可以使用。
您可以将所有图像保存到PC上的文件中,然后将Python3或Node作为HTTP服务器运行。此解决方案虽然要求您利用计算机和Internet连接在Web上托管图像。这假设你很好地让你的电脑不停地运行,或者你将使用旧电脑作为你的网络服务器。它还假设您的ISP可以在您的网络上托管网络服务器。最后,您可以从在线的众多服务中获取您自己的唯一URL(一些免费,一些免费),这样人们就不必输入您的IP地址。
我在网络上使用No-IP.com的免费域名运行类似的设置。
另外,您打算如何在网络上托管Spring Web应用程序?你会通过在线托管服务或自己托管这样做吗?如果托管自己,您会使用Apache Tomcat或Glassfish或其他容器/应用程序服务器吗?