java - 使用Java和vert.x在POST请求中获取图像

标签 java android kotlin vert.x

我有以下问题,我无法获取从android应用发送到服务器的图像,我正在使用kotlin从应用发送图像,并使用vert.x在用Java编写的服务器上接收图像。
我用以下代码发送:

val serverUrl = "http://192.168.56.1:8080/recognize/get_text_from_image"

    val client = OkHttpClient.Builder()
        .build()

    val stream = ByteArrayOutputStream()
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream)
    val byteArray = stream.toByteArray()
    val encodedImage: String = encodeToString(byteArray, DEFAULT)

    val requestBody: RequestBody = RequestBody.create(MediaType.parse("image/*jpg"), encodedImage)

    val request: Request = Request.Builder()
        .url(serverUrl)
        .post(requestBody)
        .build()
在服务器端,我正在像处理
    Router baseRouter = Router.router(vertx);
        Router apiRouter = Router.router(vertx);

        baseRouter.mountSubRouter("/recognize", apiRouter);

        vertx.createHttpServer()
                .requestHandler(baseRouter::accept)
                .listen(8080, result -> {
                    if (result.succeeded()) {
                        System.out.println("completed");
                        startFuture.complete();
                    } else {
                        startFuture.fail(result.cause());
                        System.out.println(result.cause().getLocalizedMessage());
                    }
                });

        apiRouter.route(HttpMethod.POST, "/get_text_from_image").handler(rc -> {

            BufferedImage bufferedImage = null;
            byte[] imageByte;
            try {
                BASE64Decoder decoder = new BASE64Decoder();
                imageByte = decoder.decodeBuffer(rc.getBodyAsString());
                ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
                bufferedImage = ImageIO.read(bis);
                bis.close();
                System.out.println("Decoding bytes to image");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Error while decoding bytes to image");
            }
            File outputfile = new File("/home/user/image.jpg");
            try {
                ImageIO.write(bufferedImage, "jpg", outputfile);
                System.out.println("Saving image");
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("Error while saving image");
            }

            JsonObject json = rc.getBodyAsJson();
            System.out.println(json.getString("id"));
            HttpServerResponse response = rc.response();
            response.putHeader("content-type", "application/json");

            // Write to the response and end it
            response.end("{\"status\": 200}");
        });
}
但我什么都不能放入imageByte变量,谢谢您的任何建议。

最佳答案

您需要在所有路线之前添加BodyHandler

Router baseRouter = Router.router(vertx);
baseRouter.route().handler(BodyHandler.create());
更多信息在这里https://vertx.io/preview/docs/apidocs/io/vertx/ext/web/handler/BodyHandler.html

关于java - 使用Java和vert.x在POST请求中获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62495980/

相关文章:

java - Admob 横幅位置错误

java - 如何在大列表<String>中搜索子字符串 - Java

java - 安卓-Arduino蓝牙通讯: app stops reading inputstream

android - 使用 PowerMockRunner 测试 LiveData

android - 在buildSrc中访问ApplicationVariants

java - 从输入文件中获取值并逐行添加到整数数组中(java)

java - 如何将 File 对象转换为 Netty ByteBuffer

java - fragment 上的自定义 ListView - 无法使用 getActivity()

android - 在 Android Studio 中更改系统镜像的默认路径

android - 在 sharedPref.getString 中设置默认值有什么意义?