Как получить URL-адрес для загрузки после загрузки файла - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть внутренний сервер, использующий SpringMVC, и я получаю файл, загруженный от пользователя, используя следующий код:

String imgPath = FileUtil.transferFile(imageFile);

Это создаст абсолютный путь к файлу, загруженному с сервера в imgPath. Но сейчас мне нужен публичный путь к этому файлу, чтобы веб-интерфейс мог его скачать, поскольку мы находимся на двух разных серверах. Что-то вроде

www.xxx.com/file/img.jpg

Может ли кто-нибудь дать мне представление о том, что мне делать с этим? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Я бы попробовал проект сообщества под названием 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>

StoreConfig.java

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

    @Bean
    FileSystemResourceLoader fileSystemResourceLoader() throws IOException {
        return new FileSystemResourceLoader(new File("/path/to/uploaded/files").getAbsolutePath());
    }

}

FileStore.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

восстановит его снова.В вашем случае это будет URL, который вы используете в тегах <img/>.

HTH

Внедренный контроллер также поддерживает потоковую передачу видео, в случае, если это полезно.

При этом вы также можете удалить весь свой контроллер и служебный код, как он естьбольше не требуется.Кроме того, поскольку Spring Content является абстракцией хранилища, в будущем вы также можете перейти на любой другой носитель информации, поддерживаемый Spring Content;S3 например.

0 голосов
/ 24 апреля 2019

Вы можете добавить статический обработчик ресурса для расположения изображений:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
      .addResourceHandler("/file/**")
      .addResourceLocations("file:/path/to/images");
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...