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

Micronaut多部分上载-错误:“未指定必需参数[CompletedFileUpload]”

东方森
2023-03-14
curl -v  -F "file=@image.jpg" localhost:8080/test/param1/param2
@Controller("/test")
class DemoController(private val fileService: FileService) {

    @Post(
        "/{param1}/{param2}",
        consumes = [MULTIPART_FORM_DATA],
        produces = [TEXT_PLAIN]
    )
    @ExecuteOn(TaskExecutors.IO)
    fun post(
        file: CompletedFileUpload,
        param1: String,
        param2: String
    ) : HttpResponse<String>{

        println(file.contentType)

        fileService.uploadFile("fileName", file.inputStream)
        return HttpResponse.ok("Uploaded")
    }

共有1个答案

能帅
2023-03-14

以下Java代码适用于我(Windows cURL+Micronaut 2.5.4):

package com.example;

import io.micronaut.http.HttpResponse;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Post;
import io.micronaut.http.multipart.CompletedFileUpload;
import io.micronaut.scheduling.TaskExecutors;
import io.micronaut.scheduling.annotation.ExecuteOn;

@Controller("/test")
public class DemoController {

    @ExecuteOn(TaskExecutors.IO)
    @Post(value = "/{param1}/{param2}", consumes = MediaType.MULTIPART_FORM_DATA, produces = MediaType.TEXT_PLAIN)
    public HttpResponse<String> post(CompletedFileUpload file, String param1, String param2) {
        System.out.println("Param1: " + param1 + " Param2: " + param2 + " File name: " + file.getFilename() + " Size: " + file.getSize() + " Type: " + file.getContentType().get());
        return HttpResponse.ok("Uploaded!");
    }
}

cURL命令:

.\curl.exe -v  -F "file=@dummy.pdf" localhost:8080/test/param1/param2
*   Trying ::1:8080...
* Connected to localhost (::1) port 8080 (#0)
> POST /test/param1/param2 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.77.0
> Accept: */*
> Content-Length: 13456
> Content-Type: multipart/form-data; boundary=------------------------2252ddfaf1589615
>
* We are completely uploaded and fine
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 31 May 2021 17:52:23 GMT
< content-type: text/plain
< content-length: 9
< connection: keep-alive
<
Uploaded!* Connection #0 to host localhost left intact

产出:

Param1: param1 Param2: param2 File name: file Size: 13264 Type: application/pdf
 类似资料:
  • 尝试使用声明式HTTP客户端上载文件,如下所示 卷曲 我面临的一个例外

  • 背景:我将Kotlin与Micronaut一起使用,对于这个项目,我不会添加Spring依赖项。 我成功地创建了一个Hello Word enpoint,我可以从邮递员那里发布到它。问题始于我将数据演化为生日(java.time.LocalDate)。 抄袭自邮递员 导致 实体 控制器 gradle.properties依赖关系 格雷德尔。属性 整个项目git hub(分支机构日期问题中的错误,而

  • 我是Liquibase的新手,我尝试将liquibase与postgres数据库一起使用liquibase脚本创建数据库表。我所做的是,我已经手动创建了Postgres表并通过运行命令 mvn液化酶:generateChangeLog 我创建了liquibase-outputChangeLog.xml文件。现在我尝试更新该脚本并在数据库中创建一个表。为此,我将XML代码写入新表的ChangeLog

  • 我刚刚开始创建我的第一个OpenAPI定义(2.0版),我一直被这个错误所困扰: 无效的OpenAPI文件。请修复模式错误:\n\"/参数/分类Param\":域:验证;关键字:oneOf;消息:实例与一个模式不完全匹配;匹配:0" 它只是一个类似于“/cat/count”的查询,它将返回一个整数,即有多少猫-“cat”是所需的路径参数。我的参数定义到底有什么问题?

  • 简单示例:jsp中的表单 我的控制器的方法 我的上下文xml文件 描述由于被认为是客户端错误(例如,错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或不会处理请求。 Apache Tomcat/8.5.12

  • OpenCV错误:未指定的错误(该函数未实现。使用Windows、GTK 2.x或Carbon支持重建库。如果您在Ubuntu或Debian上,请安装libgtk2.0-dev和pkg config,然后重新运行cmake或configure脚本),位于cvShowImage的/io/OpenCV/modules/highgui/src/window文件中。cpp,第545行回溯(最后一次调用):