问题描述
我正在尝试使用 Java/Spring-boot/Vaadin 构建文件上传器。
https://vaadin.com/components/vaadin-upload/java-examples
那个上传者给了我一个 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。谢谢:)
解决方法
我还没有测试过这段代码,所以它可能会也可能不会。它基于 Baeldung article 和 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);