gpt4 book ai didi

java - 如何在 Spring 5 MVC 中将 FilePart 转换为 byte[]

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:25 29 4
gpt4 key购买 nike

我有从网络表单接收和上传文件的 Controller 方法。如何从 FilePart 中提取字节数组并将其保存到数据库?

我可以通过使用 FilePart.transferTo() 将 FilePart 保存到文件中来做到这一点,但这看起来又慢又难看。有更好的方法吗?

import org.springframework.http.codec.multipart.FilePart;
import org.springframework.web.bind.annotation.*;


Mono<UploadResult> uploadFile(@RequestParam("files") FilePart file){

byte[] fileAsByteArray = convertFilePartToByteArray(file);

fileService.saveByteArrayToDB(fileAsByteArray);

/* Rest of the method */
}

最佳答案

您可以利用内部dataBuffer并将它们转换为byte[]

辅助函数:

suspend fun FilePart.toBytes(): ByteArray {
val bytesList: List<ByteArray> = this.content()
.flatMap { dataBuffer -> Flux.just(dataBuffer.asByteBuffer().array()) }
.collectList()
.awaitFirst()

// concat ByteArrays
val byteStream = ByteArrayOutputStream()
bytesList.forEach { bytes -> byteStream.write(bytes) }
return byteStream.toByteArray()
}

Controller :

@PostMapping("/upload", consumes = [MediaType.MULTIPART_FORM_DATA_VALUE])
suspend fun upload(@RequestPart("file") file: Mono<FilePart>) {
val bytes = file.awaitFirst().toBytes()
myService.handle(bytes) // do your business stuff
}

关于java - 如何在 Spring 5 MVC 中将 FilePart 转换为 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60397619/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com