0

我正在尝试使用 Micronaut 上传多部分文件但没有成功。

我收到带有消息的 400 状态代码:“未指定必需的参数 [CompletedFileUpload 文件]”。

curl -v  -F "file=@image.jpg" localhost:8080/test/param1/param2

如何使它与 CompletedFileUpload 一起使用?

科特林:

@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")
    }
4

1 回答 1

0

以下 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.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

Java 代码对您有用吗?也许这是一些 Kotlin/Groovy (?) 相关问题 [使用静态导入/短格式?]

于 2021-05-31T17:53:25.700 回答