NoSuchFileException将图像上传到spring boot

时间:2018-01-06 13:23:06

标签: java spring spring-boot

我正在春季启动,我在这条路径上创建了一个文件夹webimages floders:myApp/src/web/images

在做的时候

private String saveFile(MultipartFile file, String fileName) throws IOException {
    byte[] bytes = file.getBytes();
    String imagePath = new String(this.servletContext.getRealPath(this.imagesPath) + "/" + fileName);
    Path path = Paths.get(imagePath);
    Files.write(path, bytes);
    return imagePath;
}

我收到了这个错误:

  

java.nio.file.NoSuchFileException:/private/var/folders/4g/wd_lgz8970sfh64zm38lwfhw0000gn/T/tomcat-docbase.8255351399752894174.8098/images/IMG_2018-01-06 15:18:48.486.jpg

我应该放置images文件夹,以便成功上传文件。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您可以使用相当简单的方法将图像保存到同一/myapp/src/web/image/目录中。

您的应用程序中的路径从myapp目录开始,您只需要链接下一个路径/usr/web/images并使用FileOutputStream对象保存在那里。

以下示例。

private String saveFile(MultipartFile file,String filename) throws IOException{
        final String imagePath = "src/web/images/"; //path
        FileOutputStream output = new FileOutputStream(imagePath+filename);
        output.write(file.getBytes());

        return imagePath+filename;
}
  

第二次编辑

如果您想通过GET请求获取图像,您可以创建一个接受带有图像名称的请求参数的方法,并生成图像内容类型。类似的东西。 (此示例使用不同类型的图像。)

@RequestMapping(value = "/show/",produces = MediaType.IMAGE_PNG_VALUE)
    public @ResponseBody byte[]  showImage(@RequestParam("image") String image) throws IOException{
        final String imagePath = "src/web/images/";

        FileInputStream input = new FileInputStream(imagePath+image);
        return IOUtils.toByteArray(input);
    }

我使用apache公共依赖来获取字节数组

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

答案 1 :(得分:1)

  

我正在进行春季启动,并且我创建了一个文件夹web和   此路径上的图像文件夹:myApp / src / web / images

和这个例外:

  

java.nio.file.NoSuchFileException:   /private/var/folders/4g/wd_lgz8970sfh64zm38lwfhw0000gn/T/tomcat-docbase.8255351399752894174.8098/images/IMG_2018-01-06   15:18:48.486.jpg

在运行时,在应用程序源代码中创建的images文件夹将不会物理上位于承载应用程序的文件夹的images文件夹中作为此路径:myApp/src/web/images可能不是应用程序启动时由Spring Boot考虑。

在Spring Boot中,您可以访问位于某些特定文件夹中的静态资源,例如staticpublic。 但我不确定它会对您有所帮助,因为您不仅要访问已上传的文件,还要将内容放在文件夹中。

所以我建议您使用另一种方法:将图像放在与应用程序部署文件夹不同的特定文件夹中。
此外,通常,您希望在关闭/启动应用程序后文件可用。

因此,不使用应用程序的相对路径来托管图像:

myApp/src/web/images

使用绝对路径(前缀为/),该路径独立于应用程序的运行时文件夹。