Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在spring的资源文件夹中写入映像_Java_Spring_Filestream - Fatal编程技术网

Java 无法在spring的资源文件夹中写入映像

Java 无法在spring的资源文件夹中写入映像,java,spring,filestream,Java,Spring,Filestream,这是我的服务方式 public void CapchaString() { String capchaString = UUID.randomUUID().toString(); // ByteArrayInputStream bais = new ByteArrayInputStream(capchaString.getBytes()); try {

这是我的服务方式

public void CapchaString() {
                 String capchaString = UUID.randomUUID().toString();
    //         ByteArrayInputStream bais = new ByteArrayInputStream(capchaString.getBytes());
                            try {
                               BufferedImage bi=new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
                               Graphics g = bi.getGraphics();
                               g.drawString(capchaString, 10, 10);
                              /* File outputfile = new File("src/main/resources/output.png");*/
                               ImageOutputStream out = new FileImageOutputStream(new File("C:/Users/Saurabh/Documents/Agile maple code/JavaJ2eeTraining/src/main/resources/output.png")); 
                               ImageIO.write(bi, "png", out);

                           } catch (IOException e) {
                               throw new RuntimeException(e);
                           }


            }
    }
这是我的控制器方法

@ResponseBody
@RequestMapping(value="/photo2", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE)
public byte[] testphoto() throws IOException {
    capchaService.CapchaString();
    Resource resource = loader.getResource("output.png");

           ImageIO.createImageInputStream(resource.getFile());
    InputStream is = new BufferedInputStream(new FileInputStream(resource.getFile()));
    return IOUtils.toByteArray(is);
}
当我使用我的服务器时 HTTP状态500-类路径资源[output.png]无法解析为URL,因为它不存在

org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:177) org.springframework.core.io.AbstractFileResolvingerSource.getFile(AbstractFileResolvingerSource.java:48) com.agilemaple.common.controller.HelloController.testphoto(HelloController.java:174) sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844) javaservlet.http.HttpServlet.service(HttpServlet.java:621) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829) javaservlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

您确实需要了解webapp的工作原理:

  • 您可以设置开发环境并创建源
    src/main/resources
    是此开发环境的一部分
  • 您可以编译源代码并将它们组装到war文件或分解的war目录中
  • 将war文件部署到服务器,服务器从war文件加载类和资源。不是来自您的开发环境
  • 在生产环境中,您所拥有的只是服务器,war文件部署在服务器上。服务器上没有开发环境。生产服务器可能是一个linux服务器,其中像
    C:/Users/Saurabh/
    这样的路径根本没有意义。即使是windows计算机,该目录也不存在。即使存在,webapp也不会从那里加载资源,而是从已部署的war文件(只读)加载资源


    所以上面的代码没有任何意义。如果在服务中生成图像,则从方法返回图像的字节,而不是尝试将其写入文件,然后从文件重新加载字节。

    因此上述代码没有任何意义。如果在服务中生成图像,则从方法返回图像的字节,而不是尝试将其写入文件,然后从文件重新加载字节。你能详细说明一下吗?你的意思是我不应该从我的服务方法中写入映像并返回字节。你想从服务中获取控制器中的映像字节。因此,您的服务方法应该声明为
    byte[]CapchaString()
    。它应该返回字节,而不是将它们写入文件。使用MemoryCacheImageOutputStream写入ByteArrayOutputStream而不是FileImageOutputStream,然后返回ByteArrayOutputStream的字节。或者,为服务方法提供一个要写入的通用OutputStream,然后调用方将HttpResponse OutputStream传递给它。这样,服务方法将直接写入浏览器,而不知道它正在写入浏览器。