【问题标题】:InputStream from local machine to tomcat deployed webappInputStream 从本地机器到 tomcat 部署的 webapp
【发布时间】:2013-04-18 12:08:57
【问题描述】:

我有一种情况,我想从本地机器(假设文件目录是 C:\Users\temp\file.txt)创建一个 inputStream 到具有 Windows Server 2008 的远程服务器。

如何让网络应用程序使用文件的本地版本,因为我在编译成 WAR 文件之前尝试过这个。

File f = new File("C:\Users\temp\file.txt");

当我尝试使用 InputStream 时,它崩溃了。我相信它引用了服务器的 C:\Users\temp\file.txt,它不存在。

我知道这是一个“愚蠢”的问题,但任何建议都会非常有帮助。

【问题讨论】:

  • 根据该文本文件的内容,您可以考虑将其放在资源文件夹中。无论如何,尝试保持 Web 应用程序环境独立是一个好主意。这样您同事的任何机器或各种服务器环境都可以轻松运行它

标签: java web-applications web inputstream


【解决方案1】:

如果您尝试从另一台计算机访问存储在一台计算机上的文件,则必须以某种方式“共享”该文件。有几种相当简单的方法可以做到这一点:

  1. 设置网络文件系统。 一个流行的选择是Sambaan S3 bucket mounted as a drive。这样做的好处是,为了读取文件,所有文件都显示为“本地”,因此您可以像往常一样使用FileInputStream
  2. 使用 HTTP 共享。 在包含文件的主机上设置一个 HTTP 服务器,如 Apache,将文件复制到网络共享目录,然后使用 URL 或 HTTP 客户端,如 @987654325 @ 通过其 URL 访问文件。 (您也可以将此方法用于 FTP 或其他服务。)

一开始共享文件有点麻烦,但一旦您设置了共享文件系统或网络服务器,共享大量文件就轻而易举了。

【讨论】:

    【解决方案2】:

    在这种情况下,使用每个主机的属性文件会有所帮助。通常,您希望在属性文件中包含环境之间的所有差异。

    查看PropertyPlaceholderConfigurer 以处理切换属性文件。

    您可以扩展它以处理 {ENV} 占位符并从 Spring 中执行它,类似于此

    <bean id="propertyConfigurer" class="com.yourcompany.PerHostPropertiesConfigurer">
        <property name="filename" value="appname-{ENV}.ini" />
    </bean>
    

    在 appname-LOCAL.ini 中有这个

    text.filename=C:\Users\temp\file.txt
    

    并在 appname-PROD.ini 中将其更改为已安装的驱动器或不同的本地路径,从您的服务器的角度来看,可以像这样访问它

    text.filename=Z:\Users\temp\file.txt
    

    【讨论】:

    • 从他提出问题的方式来看,我认为文件不在同一台机器上。这种方法会访问远程文件吗?
    • 如果远程文件位于已安装的驱动器上,您可以使用此技术访问该文件。如果驱动器/文件夹没有安装到服务器上,他将不得不做一些更棘手的事情,比如 FTP,或者正如你在回答中提到的那样,HTTP/cloud
    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2013-03-31
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多