Java 如何将屏幕截图发送到服务器而不存储在本地计算机中

Java 如何将屏幕截图发送到服务器而不存储在本地计算机中,java,swing,io,awt,httpclient,Java,Swing,Io,Awt,Httpclient,我是java初学者,正在开发一个桌面应用程序 根据要求,我必须捕获屏幕截图的时间间隔,并发送到服务器上 为此,我编写了以下代码 Rectangle screenRect = new Rectangle(Toolkit .getDefaultToolkit().getScreenSize()); //To Store the scrreen shot in buffer.

我是java初学者,正在开发一个桌面应用程序

根据要求,我必须捕获屏幕截图的时间间隔,并发送到服务器上

为此,我编写了以下代码

            Rectangle screenRect = new Rectangle(Toolkit
                    .getDefaultToolkit().getScreenSize());          

            //To Store the scrreen shot in buffer.
            BufferedImage capture = new Robot()
                    .createScreenCapture(screenRect);   

            //To Save the image on specific location.
            ImageIO.write(capture, "png", new File(
                    "resources/img/screenshot.png"));
            //To decrees the size of the image
            Thumbnails.of("resources/img/screenshot.png").scale(0.50)
                    .toFile("resources/img/screenshot.png");

 File file = new File("resources/img/screenshot.png");
    MultipartEntity mpEntity = new MultipartEntity();
    ContentBody cfBody = new FileBody(file);

    mpEntity.addPart("screenshot", cfBody);
这段代码运行成功,但问题是,当任何机器没有权限在“程序文件文件夹”中写入文件时,这是不工作的


那么有没有办法通过httpClient发送图像而不存储在本地计算机中?

您可以尝试将其保存到ByteArrayOutputStream的实例中,而不是保存到文件中。然后使用此流通过http客户端发送

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(capture, "png", baos);

@AdityaKeyal的建议是完全可行的,但可能需要对代码进行一些更改。我会尝试看看您是否可以在发送临时图像时使用更方便的位置来存储临时图像,并在网络进程成功结束时简单地将其删除

根据您的“程序文件文件夹”,您似乎在Windows计算机上(即使您的路径中有反斜杠)。IMHO您应该使用环境变量%TEMP%,它指向不同Windows版本上的不同位置,但却是此类临时数据的定义位置


如果您在Linux或OSX上,则可以使用/tmp来写入临时数据。每个人都可以写入该文件夹。

否这与我的问题不匹配。请尽快给我解决方案我不使用这里的插座发送屏幕截图