linux - 创建目录并将图像上传到远程 Web 服务器
问题描述
我正在一个处理大量图像的网站上工作。用户将能够上传图片。图像将托管在单独的远程 Nginx 服务器上。创建目录并将图像上传到远程服务器的最佳方法是什么?SSH 会是一个可行的选择吗?有什么更好的吗?
使用 Spring Boot 创建 Web 应用程序
解决方案
SSH 不会真正帮助您通过网络共享或同步文件。
根据您的标签(linux),我怀疑您可以nfs-kernel-server
在“远程”服务器上安装。网络文件系统 (NFS) 允许您通过网络将目录从一个操作系统共享到另一个操作系统。这将允许您与 Spring Boot 服务器共享远程服务器的目录。
您可以按照这些说明设置您的 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 的抽象,并提供了一系列 Storage 类型的实现,包括良好的旧 Filesystem,因此它非常适合您的用例,并将通过消除您自己编写文件处理控制器和服务的代码来简化您的 Spring 应用程序代码。
添加它看起来像这样:
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());
}
}
文件存储.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
.
总而言之,您现在将拥有一个功能齐全的(POST、PUT、GET、DELETE)基于 REST 的文件服务,/files
该服务将使用您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
再次下载。
高温高压
注入的控制器也支持视频流,以防万一。
如果您希望记录有关用户上传的文件的其他元数据,那么您还可以将内容与 Spring Data 实体相关联(可用于记录此附加元数据)。您可以在此处阅读更多相关信息。
高温高压
推荐阅读
- java - 执行 Selenium 测试自动化的前端
- tensorflow - 为使用 TensorFlow 2.0 构建的深度神经网络模型提供大数据预处理的解决方案?
- postgresql - 无法弄清楚为什么我在案例陈述中遇到错误
- weblogic - 应用程序在 WebLogic ServerAdministration Console 12c 上停留在准备状态
- java - Java 正则表达式在结束标记后添加空格(如果不存在)
- python - Python 帮助:在每个类中创建一个返回字符串的方法,该字符串稍后可用于构建 csv 文件
- powerbi - 由于 Y 轴配置选项不可用,无法在 Power BI 上选择功能区图表 Y 轴数据范围
- vuex - 错误:[vuex] 不要在突变处理程序之外改变 vuex 存储状态
- reactjs - 添加 BrowserRouter 以在 React 中的特定 div 中呈现组件
- python-3.x - 如何使用类型提示指定多个返回?