0

我是 Helidon MP 的新手,想知道是否可以通过使用 Helidon MP 创建的 REST 服务将文件上传到 Oracle DB(Blob/Clob 列)。

我能够使用下面的代码在 SpringBoot 中实现相同的要求,接受文件参数作为 MultiPart,我们如何使用 Helidon MP 实现这一点

@PostMapping("/upload")
      public ResponseEntity<ResponseMessage> uploadFile(@RequestParam("file") MultipartFile file) {
        String message = "";
        try {
          storageService.store(file);

          message = "Uploaded the file successfully: " + file.getOriginalFilename();
          return ResponseEntity.status(HttpStatus.OK).body(new ResponseMessage(message));
        } catch (Exception e) {
          message = "Could not upload the file: " + file.getOriginalFilename() + "!";
          return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseMessage(message));
        }
      }    
4

1 回答 1

0

Helidon通过MPSE (带有用于SE的缓冲和流式 API 版本)风格提供对多部分数据的支持。

该实现依赖于带有 MIME MultiPart 消息的Jersey集成(与任何JAX-RS提供程序非常相似)。

允许上传文件的控制器端点方法的实现很简单,如下所示:

import import javax.ws.rs.*;
import org.glassfish.jersey.media.multipart.*;

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(MultiPart multiPart) throws IOException {

    multiPart.getBodyParts().stream()
            .filter(part -> /* retrieve your file part here, should be based on the `Content-Disposition` name parameter */ )
            .map(filePart -> {
                String fileName  = pfilePartart.getContentDisposition().getFileName();
                InputStream is = filePart.getEntityAs(BodyPartEntity.class).getInputStream();
                // use the injected `storageService` to somehow store the input stream
                this.storageService.store(fileName, is);
            });
    
}

请注意,默认情况下未激活JAX-RS多部分功能,因此应使用JAX-RS提供程序激活:

import javax.ws.rs.core.*;
import javax.ws.rs.ext.Provider;

@Provider
public class MultiPartFeature implements Feature {

    @Override
    public boolean configure(FeatureContext context) {
        return new MultiPartFeature().configure(context);
    }
}
于 2021-03-29T12:09:50.560 回答