上传文件后如何获取下载网址



我有一个使用SpringMVC的后端服务器,并使用以下代码从用户接收文件上传:

String imgPath = FileUtil.transferFile(imageFile);

这将生成服务器上传到 imgPath 的文件的绝对路径。但是现在我需要有一个该文件的公共路径,以便前端可以下载它,因为我们在两个不同的服务器上。类似的东西

www.xxx.com/file/img.jpg

谁能告诉我我应该怎么做? 提前感谢!

您可以为图像的位置添加静态资源处理程序:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/file/**")
.addResourceLocations("file:/path/to/images");
}
}

我会尝试一个名为Spring Content的社区项目。 这为处理资源提供了对存储的抽象。 它为你注入服务实现和控制器,这样你就不需要自己编写。

添加它看起来像这样:

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</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>

存储配置.java

@Configuration
@EnableFilesystemStores
@Import(RestConfiguration.class)
public class StoreConfig {
@Bean
FileSystemResourceLoader fileSystemResourceLoader() throws IOException {
return new FileSystemResourceLoader(new File("/path/to/uploaded/files").getAbsolutePath());
}
}

文件存储.java

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

仅此而已。 FileStore 本质上是一个通用的 Spring ResourceLoader。spring-content-fs依赖将导致 Spring Content 注入基于文件系统的实现。spring-content-rest依赖关系将导致 Spring Content 也注入一个实现,如果@Controller将 HTTP 请求转发到FileStore服务的方法上。

因此,您现在将拥有一个功能齐全(POST,PUT,GET,DELETE)的基于REST的文件/files服务,该服务将使用您的FileStore在服务器上检索(和存储)/path/to/uploaded/files中的文件。

所以:

curl --upload-file some-image.jpg /files/some-image.jpg

将上传some-image.jpg并将其存储在您的服务器上的/path/to/uploaded/files中。

和:

curl /files/some-image.jpg

将再次检索它。 在您的情况下,这将是您在<img/>标签中使用的网址。

呵呵

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

这样,您还可以删除不再需要的所有控制器和服务代码。 另外,由于 Spring 内容是对存储的抽象,将来您还可以转向 Spring Content 支持的任何其他存储介质;例如 S3。

最新更新