当前位置: 首页 > 知识库问答 >
问题:

NoSuchFileException将图像上载到spring boot

陶涵育
2023-03-14

我是spring boot上的wokring,我已经在这个路径上创建了一个文件夹: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。文件NoSuchFileException:/private/var/folders/4g/wd\u lgz8970sfh64zm38lwfhw0000gn/T/tomcat docbase。8255351399752894174.8098/images/IMG_2018-01-06 15:18:48.486。jpg公司

为了成功上传文件,我应该把图像文件夹放在哪里。

谢谢你的帮助

共有2个答案

伯洋
2023-03-14

我正在研究spring boot,我在这个路径上创建了一个文件夹web和images文件夹:myApp/src/web/images

这个例外:

Java语言nio。文件NoSuchFileException:/private/var/folders/4g/wd\u lgz8970sfh64zm38lwfhw0000gn/T/tomcat docbase。8255351399752894174.8098/images/IMG_2018-01-06 15:18:48.486。jpg公司

在运行时,在应用程序源代码中创建的图像文件夹将不会物理地位于托管应用程序的文件夹的图像文件夹中,因为myApp/src/web/图像在应用程序启动时可能不会被Spring Boot考虑。

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

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

因此,不要使用应用程序的相对路径来承载图像:

myApp/src/web/images

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

林英锐
2023-03-14

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

应用程序中的路径从myapp目录开始,您只需链接以下路径,然后使用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>
 类似资料:
  • 我想在对话框窗口中显示图像(保存在项目文件夹中),但当我运行我的方法showDialogWithImage时,我会得到文件NotFoundException:imgs\pic1。jpg(系统无法找到指定的文件),尽管图像位于那里。 我也尝试过以这种方式加载图像: Image=new Image(getClass(). getResourceAsStream(path));,但遇到了同样的问题。 是

  • 问题内容: 我想在对话框窗口中显示图像(保存在项目文件夹中),但是当我运行方法showDialogWithImage时,我得到FileNotFoundExcpetion:imgs \ pic1.jpg(系统找不到指定的文件),尽管图像位于此处。 我也尝试过以这种方式加载图像: Image image = new Image(getClass()。getResourceAsStream(path))

  • 我想在上传到Firebase存储之前减小图像文件大小,因为上传需要很长时间。 这是conatins编辑文本图像视图的表单 单击“保存”按钮时,我同时保存数据(在实时数据库中)和图像(存储)。 那么如何减少图像大小或压缩它呢??

  • 我想上传图像/文件到服务器使用它的uri使用下面的代码 所以,在这里我的回应是不成功的。API返回我内部服务器错误状态500,但我知道服务器工作良好(我测试了其他应用程序)。另外,文件uri也可以。我是新来的,所以能有人发现我的错误,并详细解释为什么是错误的。

  • 问题内容: 在我的应用程序中,我需要从URL下载很多图片并将其显示在gridView中。(可以在1-200张照片之间)。我不想一次下载所有图片。我读到了关于延迟下载的信息,我的问题是:我只能得到Json的一部分,以其他线程下载图片, 并且只有当用户向下滚动 gridView时,我才继续到Json的其他部分,并且等等吗? 编辑:再次嗨。我想在此gridView中实现多选,而我很难在适配器的getVi