gpt4 book ai didi

java - 如何通过Http提供文件上传服务?

转载 作者:行者123 更新时间:2023-12-02 10:03:03 25 4
gpt4 key购买 nike

我需要提供一个基于Http的文件上传服务。

我应该使用 SpringMVC 制作一个 java web 项目来通过 Controller 接收文件吗?或者有什么建议吗?

那么优先选择什么servlet容器呢? Tomcat ?

谢谢!

最佳答案

您应该查看名为 Spring Content 的 Spring 社区项目。

该项目可以轻松构建内容丰富的应用程序和服务。它具有与 Spring Data 相同的编程模型。这意味着它可以提供文件存储和 Controller 实现的实现,因此您无需亲自创建这些实现。它本质上是内容(或非结构化数据),就像 Spring Data 是结构化数据一样。

这可能类似于以下内容:-

pom.xml (for Spring Web MVC. Spring Boot also supported)

   <!-- Spring Web MVC dependencies -->
...

<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-fs</artifactId>
<version>0.7.0</version>
</dependency>

<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.7.0</version>
</dependency>

StoreConfig.java

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

@Bean
File filesystemRoot() {
try {
return new File("/path/to/your/uploaded/files");
} catch (IOException ioe) {}
return null;
}

@Bean
FileSystemResourceLoader fileSystemResourceLoader() {
return new FileSystemResourceLoader(filesystemRoot().getAbsolutePath());
}

}

FileStore.java

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

这就是获取允许您存储和检索文件的 REST 端点所需执行的全部操作。正如前面提到的,它的实际工作原理与 Spring Data 非常相似。当您的应用程序启动时,Spring Content 将看到 spring-content-fs 依赖项,知道您想要在文件系统上存储内容并将 FileStore 接口(interface)的文件系统实现注入(inject)到应用程序上下文。它还会看到 spring-content-rest 并注入(inject)与文件存储接口(interface)通信的 Controller (即 REST 端点)。因此,您不必自己执行任何操作。

例如:

curl -X POST/files/myfile.pdf -F "file=@/path/to/myfile.pdf"

将文件存储在文件系统上的/path/to/your/uploaded/files/myfile.pdf

还有:

curl/files/myfile.pdf

将再次获取它等等...这些端点支持完整的 CRUD,并且 GET 和 PUT 端点还支持视频流(或字节范围请求)。

您还可以决定将内容存储在其他地方,例如将实体存储在数据库中,或者通过将 spring-content-fs 依赖项交换为适当的 Spring 内容存储模块来存储在 S3 中。每种存储类型的示例为 here .

此外,如果有帮助的话,内容通常与 Spring 数据实体相关联。因此,也可以让 FileStore 接口(interface)实现 ContentStore,如下所示:

> FileStore.java

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

并将 Spring Content-annotated 字段添加到 Spring Data 实体中,如下所示:

> File.java

@Entity
public class File {
@Id
@GeneratedValue
private long id;

...other existing fields...

@ContentId
private String contentId;

@ContentLength
private long contentLength = 0L;

@MimeType
private String mimeType = "text/plain";

...
}

此方法更改了 REST 端点,因为内容现在可以通过 Spring Data URL 进行寻址。所以:

POST/files/{fileId} -F“image=@/some/path/to/myfile.pdf”

会将myfile.pdf上传到/path/to/your/uploaded/files/myfile.pdf。与之前一样,但它还会更新 ID 为 fileId 的文件实体上的字段。

GET/files/{fileId}

会再次得到它。

HTH附:不要羞于提出问题/功能请求和/或 PR,我们正在积极寻求参与。

关于java - 如何通过Http提供文件上传服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55492583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com