Spring: ссылка на ресурсы / статическую папку

0

Я разрабатываю Rest API с использованием Spring Boot и AngularJS на стороне клиента, я загружаю файлы в /resources/static/upload с помощью Spring с помощью RestController ниже и используя их на стороне клиента

@RestController
@CrossOrigin("*")
public class FilmController {
    @Autowired
    private FilmRepository filmRepository;

    @RequestMapping(value = "/films", method = RequestMethod.POST)
    public void saveFilm(@RequestParam("file") MultipartFile file) throws Exception {

        File convFile = new File("src/main/resources/static/upload/"+file.getOriginalFilename());

        convFile.createNewFile();
        FileOutputStream fos = new FileOutputStream(convFile);
        Blob blob = new SerialBlob(file.getBytes());

        fos.write(file.getBytes());
        fos.close();
        System.out.println(convFile.getName());


        filmRepository.save(new Film(convFile.getName(), blob));
    }

    @RequestMapping(value = "/films", method = RequestMethod.GET)
    public List<Film> getAllFilms() {
        return filmRepository.findAll();
    }

}

Вот как я обратился к загруженному изображению "image.jpg"

<img src="http://localhost:8080/upload/image.jpg" />

Но, когда я запускал пакет mvn и запускал свой файл jar приложения, я не могу получить доступ к загруженному изображению на стороне клиента, я не получил 404.

Может кто-нибудь объяснить, как Spring хранит и ссылается на статические ресурсы и как я могу решить эту проблему.

  • 2
    Вы не можете ... Вы не можете загрузить на путь в classpath, который фактически будет внутри фляги.
  • 0
    Итак, где я могу загрузить свои файлы и получить доступ к ним на стороне клиента?
Показать ещё 1 комментарий
Теги:
spring-boot
spring
spring-mvc

2 ответа

2
Лучший ответ

Я использую абсолютный путь к каталогу, и это работает в обоих случаях: когда он запускается с mvn spring-boot:run и когда он работает как java -jar app.jar.

Например, вы можете попытаться сохранить закачки в /opt/upload (убедитесь, что она существует, и у пользователя есть права на запись в нее):

File convFile = new File("/opt/upload/"+file.getOriginalFilename());

Также вы должны настроить Spring для загрузки загрузок из этого каталога:

@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
          .addResourceHandler("/upload/**")
          .addResourceLocations("file:/opt/upload/");
    }

}

Подробнее о настройке обработчика ресурсов: http://www.baeldung.com/spring-mvc-static-resources

  • 0
    Как получить доступ к файлам в / opt / upload со стороны клиента (angularjs)?
  • 0
    Что вы имеете в виду под «доступом»? Изображения будут доступны, как и раньше, по URL-адресу, например, http://localhost:8080/upload/image.jpg
Показать ещё 1 комментарий
0

Прежде всего, вы не можете сохранить в структуре папок, которые вы видите в своей среде IDE, а не о том, как ваш код будет находиться в развернутом пакете

File convFile = new File("src/main/resources/static/upload/"+file.getOriginalFilename());

хранить с использованием относительного пути

File convFile = new File("/static/upload/"+file.getOriginalFilename());

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

<mvc:resources mapping="/upload/**" location="/static/upload/" />

Ещё вопросы

Сообщество Overcoder
Наверх
Меню