我有从网络表单接收和上传文件的控制器方法。如何从 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()
}
控制器:
@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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)