- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要提供一个基于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/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!