Я разрабатываю 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 хранит и ссылается на статические ресурсы и как я могу решить эту проблему.
Я использую абсолютный путь к каталогу, и это работает в обоих случаях: когда он запускается с 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
http://localhost:8080/upload/image.jpg
Прежде всего, вы не можете сохранить в структуре папок, которые вы видите в своей среде 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/" />