我正在一个处理很多图像的网站上工作。用户将能够上传图像。图像将托管在单独的远程Nginx服务器上。创建目录并将图像上传到远程服务器的最佳方法是什么? SSH是可行的选择吗?有什么更好的吗?
该Web应用程序是使用Spring Boot创建的
答案 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