创建目录并将图像上传到远程Web服务器

时间:2019-05-04 04:29:07

标签: linux spring spring-boot nginx web-development-server

我正在一个处理很多图像的网站上工作。用户将能够上传图像。图像将托管在单独的远程Nginx服务器上。创建目录并将图像上传到远程服务器的最佳方法是什么? SSH是可行的选择吗?有什么更好的吗?

该Web应用程序是使用Spring Boot创建的

1 个答案:

答案 0 :(得分:1)

SSH并不会真正帮助您在网络上共享或同步文件。

基于您的标签(linux),我怀疑您可以在“远程”服务器上安装nfs-kernel-server。网络文件系统(NFS)允许您通过网络将目录从一个操作系统共享到另一个操作系统。这将允许您与Spring Boot服务器共享远程服务器中的目录。

您可以按照these instructions来设置NFS服务器。

然后您可以使用以下方法在Spring Boot服务器上挂载该远程目录:

$ NFS_SERVER="<your remote server>:/<your exported directory>"
$ sudo mount -t nfs "${NFS_SERVER}" /mnt

读写文件到/ mnt实际上就是将它们读写到远程服务器上的目录中。因此,您要做的就是让您的Spring Boot应用能够读写/mnt

您还可以查看社区项目Spring Content。该项目是对Storage的抽象,并为包括良好的旧Filesystem在内的一系列Storage类型提供了实现,因此它非常适合您的用例,并且通过消除您自己编写文件处理控制器和服务的需求,可以简化Spring应用程序代码。 / p>

添加它看起来像这样:

  

pom.xml(假设为Maven)。

    <!-- Java API -->
    <!-- just change this depdendency if you want to store somewhere else -->
    <dependency>
        <groupId>com.github.paulcwarren</groupId>
        <artifactId>spring-content-fs-boot-starter</artifactId>
        <version>0.8.0</version>
    </dependency>
    <!-- REST API -->
    <dependency>
        <groupId>com.github.paulcwarren</groupId>
        <artifactId>spring-content-rest-boot-starter</artifactId>
        <version>0.8.0</version>
    </dependency>
  

StoreConfig.java

@Configuration
@EnableFilesystemStores
@Import(RestConfiguration.class)
public class StoreConfig {

    @Bean
    FileSystemResourceLoader fileSystemResourceLoader() throws IOException {
        return new FileSystemResourceLoader(new File("/mnt").getAbsolutePath());
    }

}
  

FileStore.java

  @StoreRestResource(path="files")
  public interface FileStore extends Store<String> {
  }

就是这样。 FileStore本质上是一个通用的Spring ResourceLoader。 spring-content-fs-boot-starter依赖性将导致Spring Content注入FileStore接口的基于文件系统的实现,因此您无需担心自己实现它。此外,spring-content-rest-boot-starter的依赖关系将使Spring Content还注入@Controller的实现,该实现将HTTP请求转发到FileStore的方法上。

全部,您现在将在/files处获得基于REST的全功能文件服务(POST,PUT,GET,DELETE),该服务将使用您的FileStore来检索(和存储)其中的文件/mnt;即在您的远程NFS服务器上。

所以:

curl -F file=@/path/to/local/an-image.jpg /files/some-directory/an-image.jpg

将上传an-image.jpg并将其存储在服务器上的/mnt/中。

GET /files/some-directory/an-image.jpg

将再次下载an-image.jpg

HTH

如果有用,注入的控制器也支持视频流。

如果您希望记录有关用户上传的文件的其他元数据,则还可以将内容与Spring Data实体(可用于记录此其他元数据)相关联。您可以了解有关here的更多信息。

HTH