代码之家  ›  专栏  ›  技术社区  ›  bharath

无法在应用程序路径Spring MVC中存储图像(Java.IO .FieloToFunDebug)

  •  0
  • bharath  · 技术社区  · 6 年前

    在春季MVC中,我想将图像存储到 images folder 哪一个在里面 resources

    我尝试了以下代码

    BufferedImage image = null;
            byte[] imageByte;
    
            BASE64Decoder decoder = new BASE64Decoder();
            imageByte = decoder.decodeBuffer(studentDetails.getStuImg());
            ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
            image = ImageIO.read(bis);
            bis.close();
    
            String file=    request.getContextPath()+"/resources/images/imageee.png";
    
            // write the image to a file
            File outputfile = new File(file);  
            ImageIO.write(image, "png", outputfile);
    

    但我有以下例外

    java.io.FileNotFoundException: \campasAdmin\resources\images\imageee.png (The system cannot find the path specified)
        at java.io.RandomAccessFile.open0(Native Method)
        at java.io.RandomAccessFile.open(Unknown Source)
        at java.io.RandomAccessFile.<init>(Unknown Source)
        at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source)
        at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(Unknown Source)
        at javax.imageio.ImageIO.createImageOutputStream(Unknown Source)
        at javax.imageio.ImageIO.write(Unknown Source)
        at com.rasvek.cms.controller.StudentController.addfeeCategory(StudentController.java:272)
        at com.rasvek.cms.controller.StudentController$$FastClassBySpringCGLIB$$cb2af793.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:52)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
        at com.rasvek.cms.controller.StudentController$$EnhancerBySpringCGLIB$$4b76b9e3.addfeeCategory(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)
    

    如何存储到以下位置

    please look at derectory

    我想在上面的位置。 怎么做,请帮帮我。谢谢您!.

    2 回复  |  直到 6 年前
        1
  •  0
  •   Alien    6 年前

    总是尝试使用通用解决方案,因为不同操作系统之间的路径不同。

    使用Java分隔符,使任何操作系统(Linux/Windows)都能正常工作。

    File.separator (import java.io.File;)
    

    如果操作系统是 窗户 然后参考下面的代码。

    尝试替换此行: string file=request.getContextPath()+“/resources/images/imageee.png”;

    有了这个: 字符串文件=request.getContextPath()+“ \\resources\\images\\imageee.png “;

    如果您想在Tomcat(catalina_home)位置存储图像,请参考以下代码。

    String catalinaRootPath = System.getProperty("catalina.home");
    File dir = new File(catalinaRootPath + File.separator + "images");
    if (!dir.exists()){
        dir.mkdirs();
    }
    

    然后在这个目录中写入图像,或者也可以创建子目录,然后再写入。

        2
  •  0
  •   Paul Warren    6 年前

    如果我是你,我会用 Spring Content . 然后,您就不必担心如何实现这些代码了,而且您在存储图像的位置上有更大的灵活性。

    很容易添加到应用程序中。

    pom.xml文件

        <dependency>
            <groupId>com.github.paulcwarren</groupId>
            <artifactId>spring-content-fs</artifactId>
            <version>0.0.11</version>
        </dependency>
    

    存储配置.java

    @Configuration
    @EnableFilesystemStores
    public class EnableFilesystemStoresConfig {
    
        @Bean
        File filesystemRoot() {
            try {
                return new File("/path/to/your/images");
            } catch (IOException ioe) {}
            return null;
        }
    
        @Bean
        FileSystemResourceLoader fileSystemResourceLoader() {
            return new FileSystemResourceLoader(filesystemRoot().getAbsolutePath());
        }
    
    }
    

    图像存储.java

      public interface ImageStore extends Store<String> {
      }
    

    就这样。ImageStore本质上是一个Spring资源加载器,所以您所需要做的就是自动连接它来使用它。这个 spring-content-fs 依赖关系将导致Spring内容代表您插入基于文件系统的实现:

    图片库测试.java

    @RunWith(...)
    public class ImageStoreTest {
    
        @Autowired
        private DocumentStore store;
    
        @Test
        public void sample() {
           InputStream is = getImageStream();
           Resource r = store.getResource("/some-image.jpg");
           OutputStream os = ((WritableResource)r).getOutputStream();
           IOUtils.copy(is, os);
           is.close();
           os.close();
        }
    
        public InputStream getImageStream() {
           ...
        }
    }
    

    如果您希望将图像存储在数据库中,或者存储在S3中,那么只需将依赖项更改为所需的依赖项,然后更新 @Configuration 为特定类型的存储添加连接详细信息。参考线位于 this page .

    作为您使用SpringWebMVC的工具,我假设您有一个RESTAPI,这样您就可以更进一步了。添加此依赖项:

        <dependency>
            <groupId>com.github.paulcwarren</groupId>
            <artifactId>spring-content-rest</artifactId>
            <version>0.0.11</version>
        </dependency>
    

    这个 @Import 到storeconfig.java:

    @Configuration
    @EnableFilesystemStores
    @Import(RestConfiguration.class)
    public class EnableFilesystemStoresConfig {
    

    这个 @StoreRestResource 对ImageStore的注释。

    图像存储.java

      @StoreRestResource(path="images")
      public interface ImageStore extends Store<String> {
      }
    

    现在,您将拥有一个完全功能(post、put、get、delete)的基于REST的图像服务,位于 /images 它将使用ImageStore将图像存储在 /path/to/your/images .

    所以…

    curl --upload-file example-image.jpg /images/example-image.jpg

    将上载example-image.jpg并将其存储在 /path/to/your/images/example-image.jpg 在服务器上,然后:

    GET /images/example-image.jpg

    将返回下载。

    高温高压