Spring:引用resources / static文件夹

时间:2016-04-21 11:47:31

标签: java angularjs spring spring-mvc spring-boot

我正在客户端使用Spring Boot和AngularJS开发Rest API,我使用下面的RestController将文件上传到/ resources / static / upload并在客户端使用它们

@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 个答案:

答案 0 :(得分:2)

我使用目录的绝对路径,这适用于两种情况:当它使用mvn spring-boot:run运行时以及何时以java -jar app.jar运行。< / p>

例如,您可以尝试将上传保存到/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

答案 1 :(得分:0)

首先,您无法存储在IDE中看到的文件夹结构,而不是您的代码在已部署的软件包中的存储方式

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

使用相对路径存储

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

并在spring config中为您的图片上传文件夹添加资源位置映射。

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