SpringBoot我想获取图片流,然后将图片流的数据传到服务器上

发布于 2022-09-12 23:21:10 字数 4549 浏览 13 评论 0

我想获取图片流,然后将图片流的数据传到服务器上

这行好像是获取图片流的,但是这个buffers我怎么传递给服务器

我想把buffers作为参数传给口,不知道怎么实现?

ByteBuffer buffers = strItsPlateResult.struPicInfo[i].pBuffer.getByteBuffer(offset, strItsPlateResult.struPicInfo[i].dwDataLen);

1、这段代码是跑在本地电脑上的

2、有个远程服务端,我希望跑这段代码时,可以将图片流传给远程的服务器

3、我希望将图片流传给远程服务器的接口

for(int i=0;i<strItsPlateResult.dwPicNum;i++)
                    {
                        if(strItsPlateResult.struPicInfo[i].dwDataLen>0)
                        {
                            SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
                            String newName = sf.format(new Date());
                            FileOutputStream fout;
                            try {
//                                String filename = ".\\pic\\"+ new String(pAlarmer.sDeviceIP).trim() + "_"
//                                        + newName+"_type["+strItsPlateResult.struPicInfo[i].byType+"]_ItsPlate.jpg";
                                String filename = "D:\\ScenePics\\Plate20210416165034669.jpg";
                                fout = new FileOutputStream(filename);
                                //将字节写入文件
                                long offset = 0;
                                ByteBuffer buffers = strItsPlateResult.struPicInfo[i].pBuffer.getByteBuffer(offset, strItsPlateResult.struPicInfo[i].dwDataLen);
                                System.out.println("buffers == " + buffers);
                                byte [] bytes = new byte[strItsPlateResult.struPicInfo[i].dwDataLen];

                                System.out.println("bytes == " + bytes);
                                
                                buffers.rewind();
                                buffers.get(bytes);
                                fout.write(bytes);
                                fout.close();
                            } catch (FileNotFoundException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }

获取图片数据流接口

/**
     * 从输入流中获取数据
     *
     * 输入流
     * @return
     * @throws Exception
     */
    @ApiOperation("获取图片二进制流")
    @RequestMapping(value="/v1/bulldozer-info/inputStream", method={ RequestMethod.POST })
    public static byte[] readInputStream(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String fileName = request.getParameter("fileName");
        log.info("filename:"+fileName);
//        String fileName ="shafei.xls";
//        String fileFullPath = "C:/Users/Dell/Desktop/print/test/" + fileName;
        String fileFullPath = "/Users/shanguangqing/Desktop/company20210122/bulldozer-admin-java/abbott-cloud-core/target/" + fileName;

        InputStream input = null;
        FileOutputStream fos = null;

        try {
            input = request.getInputStream();
            File file = new File("/Users/shanguangqing/Desktop/company20210122/bulldozer-admin-java/abbott-cloud-core/target/");
            if(!file.exists()){
                file.mkdirs();
            }
            fos = new FileOutputStream(fileFullPath);
            int size = 0;
            byte[] buffer = new byte[1024];
            while ((size = input.read(buffer,0,1024)) != -1) {
                fos.write(buffer, 0, size);
            }

            //响应信息 json字符串格式
            Map<String,Object> responseMap = new HashMap<String,Object>();
            responseMap.put("flag", true);

            //生成响应的json字符串
            String jsonResponse = JSONObject.toJSONString(responseMap);
//                sendResponse(jsonResponse,response);
        } catch (IOException e) {
            //响应信息 json字符串格式
            Map<String,Object> responseMap = new HashMap<String,Object>();
            responseMap.put("flag", false);
            responseMap.put("errorMsg", e.getMessage());
            String jsonResponse = JSONObject.toJSONString(responseMap);
   //         sendResponse(jsonResponse,response);
        } finally{
            if(input != null){
                input.close();
            }
            if(fos != null){
                fos.close();
            }
        }
        return null;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

§普罗旺斯的薰衣草 2022-09-19 23:21:10

你展示的代码里已经将图片buffer数据保存为图片文件了,不是太理解你这里的服务器是指第三方服务器还是指运行你自己springboot程序的服务器

橘虞初梦 2022-09-19 23:21:10

为了方便起见,下面的工具类全部使用 hutool。

服务端

    @PostMapping("/v1/bulldozer-info/inputStream")
    public String readInputStream(@RequestBody String body) {
        // 接收 base64 并重新转化成二进制
        byte[] imageData = Base64.decode(body);

        try {
            //写入文件
            FileUtil.writeBytes(imageData, new File("xxx/xxx.jpeg"));
        } catch (IORuntimeException e) {
            e.printStackTrace();
            return "failure";
        }

        return "success";
    }

客户端

    public static void main(String[] args) {
        //读取图片的二进制数据,并转换成 base64
        byte[] imageData = FileUtil.readBytes("imagepath");
        String imageBase64 = Base64.encode(imageData);

        HttpResponse execute = HttpUtil.createPost("http://ip:port/v1/bulldozer-info/inputStream")
                .body(imageBase64)
                .execute();

        // 应该是 success
        System.out.println(execute.body());
    }
笑饮青盏花 2022-09-19 23:21:10

你想问的是,你的服务端接口写好了,怎么调用,把文件流传到服务端接口吧。
转一篇博客你看一下吧,
https://www.cnblogs.com/chafe...

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文