将spring mvc中的图像永久上传到其他位置

Posted

技术标签:

【中文标题】将spring mvc中的图像永久上传到其他位置【英文标题】:Upload image in spring mvc permanently in other location 【发布时间】:2017-03-16 15:08:44 【问题描述】:

我想在文件系统中的 spring mvc 中上传图像。我可以做到,但是当重新部署项目时,所有图像都从目录中删除。现在我的问题是如何永久上传图片?我希望在实际应用中使用它。

【问题讨论】:

【参考方案1】:

您可能在项目目录/war 下上传了图片。每次部署/构建项目/战争时,图像都会被删除。

您需要将图像文件保存在您的项目/战争之外。

对于实际应用,我建议您至少在单独的服务器中保存/提供您上传的图像。 Amazon S3 是一个相当不错的。您可以将相对于 S3 基本 url 的对象/文件名存储在数据库中。他们也有 Java API 供您上传文件。

【讨论】:

感谢您的回答。对此没有其他解决方案吗?我想要这样,假设我的地址是www.example.com,所以我想有一个类似www.example.com/upload/ 的目录并将所有上传的图像保存在那里。【参考方案2】:

如前所述,为了保留这些上传的图像,最好将它们保存在您的项目/.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 连接将图像托管在网络上。这假设您很擅长让您的 PC 不停地运行,或者有一台旧的,您将用作您的网络服务器。它还假设您的 ISP 同意您在网络上托管网络服务器。最后,您可以从众多在线服务(有些免费,有些收取少量费用)中获取您自己的唯一 URL,这样人们就不必输入您的 IP 地址。

我在我的网络上使用来自 No-IP.com 的免费域名运行类似的设置。

另外,您打算如何在 Web 上托管您的 Spring Web 应用程序?您是通过在线托管服务还是自己托管?如果您自己托管,您会使用 Apache Tomcat 或 Glassfish 还是其他容器/应用程序服务器?

【讨论】:

以上是关于将spring mvc中的图像永久上传到其他位置的主要内容,如果未能解决你的问题,请参考以下文章

在spring MVC中将图像上传到服务器并将参考存储在mysql数据库中[关闭]

在 Spring MVC 中使用 JavaScript 上传图像以进行预览

在spring mvc中上传图片

在 Angular 2 和 Spring MVC 中上传带有其他表单字段的文件

将 CSS 和图像链接到 Spring MVC maven 项目

批量上传图片到 s-s-rS