当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring Webflux路由配置将图像上载到MySQL数据库

燕元明
2023-03-14

我想将图像上传到MySQL DB,我使用spring web flux、hibernate Responsive mutiny,我使用控制器方法保存文件,使用路由配置方法,我得到错误“415 Unsupported Media Type”。

下面是代码,

控制器

@RouterOperation
    @Bean
    public RouterFunction<ServerResponse> uploadImage(CommonHandler handler) {
        return route().POST("/uploadImage/{id}", accept(APPLICATION_JSON), handler::uploadImage,
                ops -> ops.beanClass((CommonHandler.class).beanMethod("uploadImage")).build();
    }

处理程序

@Operation(summary = "Upload Image", description = "Upload User Image", requestBody = @RequestBody(description = "Upload Image", content = @Content(schema = @Schema(implementation = FilePart.class))), responses = {
            @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "success", content = @Content(schema = @Schema(implementation = String.class, description = "Returns Id"))) })
    public Mono<ServerResponse> uploadImage(ServerRequest req) {
        String userId = req.pathVariable(ID);
        if (uuidString.isEmpty()) {
            return ServerResponse.badRequest()
                    .body(BodyInserters.fromValue(new ApiResponse(400, ID_CANNOT_BE_NULL, null)));
        } else {
            return req.bodyToMono(FilePart.class)
                    .flatMap(a -> ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(
                            BodyInserters.fromValueuploadImage(a, UUID.fromString(uuidString)))))
                    .switchIfEmpty(ServerResponse.notFound().build());
        }
    }

邮递员请求

这就是错误所在

Resolved [UnsupportedMediaTypeStatusException: 415 UNSUPPORTED_MEDIA_TYPE "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryFq3IABrSBSF51xcR' not supported for bodyType=org.springframework.http.codec.multipart.FilePart"] for HTTP POST

我尝试将内容类型更改为image/png、image/jpg,并完全删除内容类型,但仍然不起作用。

控制器方法(工作正常)

@RequestMapping(value = "/uploadImage/{id}", method = RequestMethod.POST)
    public ResponseEntity<String> uploadImage(@PathVariable String id,
            @RequestPart("image") FilePart image) { 
        Flux<DataBuffer> imageDataBuffer = image.content(); 
        Mono<byte[]> imageBytes = DataBufferUtils.join(image.content()).map(dataBuffer -> dataBuffer.asByteBuffer().array());
        String userId = service.uploadImageToUser(imageBytes, id);
        return new ResponseEntity<String>(userId, HttpStatus.CREATED);
    }

非常感谢您的帮助。

提前谢谢。

共有1个答案

凌永逸
2023-03-14

在关系数据库中存储图像/文档(二进制数据)不是一个好主意,因为数据库的设计不是为了处理大量的BLOB数据。您可以将文件存储在文件系统中,并将文件路径作为字符串存储在数据库中。

 类似资料:
  • 问题内容: 我正在尝试从HTML表单中将图像保存在数据库中。我已经编写了PHP代码来完成此任务。该程序不会生成任何错误消息,而且不会在MySQL数据库中插入图像数据。请检查一下。在这里,我分享了我的代码的摘录。 错误消息您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’‘附近使用正确的语法 问题答案: 首先,您应该检查 图像列是否为BLOB类型 ! 我对您的SQL表一无

  • 我将图像路径(来自图库的图像)存储在SQLite数据库中,现在加载到图像视图中。。。并使用此代码: 和错误: E/BitmapFactory:无法解码流:java.io.FileNotFoundException:/storage/emulated/0/DCIM/Camera/IMG_20161230_224205.jpg(权限被拒绝)

  • 日安!我正在尝试搜索一个从Android上传一个图像文件到一个在线MySQL数据库的基本教程,但是我找不到任何。 我现在正在做一个activity,可以把用户的个人资料图片从Android上传到在线服务器上。 我需要的是像显示一个按钮,当它被点击时,用户可以从文件中选择一个图像。有人能指导我做这件事吗?提前道谢!

  • 问题内容: 我有当前的应用程序,该应用程序从MySQL数据库发送和检索数据,但是到目前为止,我要传递的信息是String。如何更新下面的代码以也可以发送图像。 注意:我已经像其他String字段一样添加了image字段,但是应用程序现在停止了,它显然无法将图片转换为Text。让我知道您的想法或任何可用的转换。我只是拍张照片,然后将照片发送给MySQL。 问题答案: 如果要在服务器上发送图像!您必须

  • 这几天来,我一直对这个问题耿耿于怀,似乎在任何地方都找不到正确的答案。任何帮助都将不胜感激! 最终目标:让用户上传最多4张图片。检查错误。使用文件名上传图片到文件系统中的用户文件夹中(mkdir如果不存在),将文件路径存储在SQL表的相应部分。 我不断地改变事情以获得部分结果,现在我已经把自己编码成了一个大习惯。如果您有任何问题,请告诉我,甚至可以建议一个更好的方法来实现最终目标。 谢谢!! 从框

  • 问题内容: 如何在MySQL数据库中存储和显示图像。到目前为止,我只编写了从用户那里获取图像并将其存储在文件夹中的代码,而到目前为止,我编写的代码是: HTML FILE PHP文件 问题答案: 我找到了答案,对于那些在这里寻找相同事物的人,我是怎么做的。您不应该考虑将图像上传到数据库,而是可以将上传文件的名称存储在数据库中,然后检索文件名,并在要显示图像的任何位置使用它。 HTML代码 PHP代