首页 > 解决方案 > 你将如何 Http-Post 一个 MultipartFile?

问题描述

我正在尝试使用 Java/Spring-boot/Vaadin 构建文件上传器。

https://vaadin.com/components/vaadin-upload/java-examples

那个 Uploader 给了我一个 MemoryBuffer。如何将其发布到我的后端,如下所示:


@RestController
@RequestMapping("files")
public class FilesController {
...
    @PostMapping
    public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) {
        try {
            fileService.save(file);
            return ResponseEntity.status(HttpStatus.OK)
                    .body(String.format("File uploaded successfully: %s", file.getOriginalFilename()));
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body(String.format("Could not upload the file: %s!", file.getOriginalFilename()));
        }
    }
...

我试过类似的东西:

        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httppost = new HttpPost("http://localhost:9091/upload/files");

        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();

但我不知道如何添加请求的 MultipartFiles。谢谢 :)

标签: javahttpfile-uploadvaadinmultipartfile

解决方案


I haven't tested this code, so it may or may not work. It's based on a Baeldung article and the FileData JavaDoc.

FileData fileData = memoryBuffer.getFileData();

MultipartEntityBuilder builder = MultipartEntityBuilder.create();         
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("blabla", fileData.getFile(), 
    ContentType.create(fileData.getMimeType()), 
    fileData.getFileName());
HttpEntity entity = builder.build();
httppost.setEntity(entity);

推荐阅读