当前位置: 首页 > 知识库问答 >
问题:

如何在Spring5MVC中将FilePart转换为byte[]

韶云瀚
2023-03-14

我有一个从web表单接收和上传文件的控制器方法。如何从FilePart中提取字节数组并将其保存到DB?

我可以通过使用FilePart将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 */
 }

共有3个答案

太叔富
2023-03-14

你可以这样做:

file.content()
.map { it -> it.asInputStream().readAllBytes() }
.map { it -> fileService.saveByteArrayToDB(it) } // it is Byte array
贺乐意
2023-03-14

你是说界面组织吗。springframework。http。编解码器。多部分。文件部分?

请参阅如何正确读取Flux

匡祖鹤
2023-03-14

您可以利用内部dataBuffer并将其转换为字节[]

辅助函数:

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
}
 类似资料:
  • 在我的spring应用程序中,我正在获取FilePart对象,并需要将其转换为byteArray。 以下是我的代码。 但它给了我错误 非法状态异常: 块 ()/块第一()/块最后 () 正在阻塞,这在线程反应器中不受支持

  • 问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon

  • 问题内容: 我有一个我使用的,因为我想在逻辑上区分不同类型的字节。 我可以轻松地进行转换, 但我找不到转换或转换切片的方法:失败。 这样的事情可能吗?内存中的位是相同的(对吗?),因此应该采取某种方法,除非逐字节复制到新对象中。 例如,这些都不起作用:http : //play.golang.org/p/WPhD3KufR8 问题答案: 您不能将自己的myByte的片转换为字节的片。 但是您可以拥

  • 问题内容: 有没有办法将a 变成a 或将一个字母变成a (例如如何将a 变成a 和a 变成an )?(如果可以,请链接到相关文档)。 我该如何找到在文档中才隐约知道的类似内容? 问题答案: 您可以通过确定可能涉及的类来查找文档。在这里,候选人是和。 您应该先熟悉以下内容: 原始包装 中的Java Collection框架 它还有助于通过教程更慢地介绍API。 处理字符串中的字符

  • 问题内容: 我一直在这里找到问题,并且Google的人们遇到了麻烦,而不是遇到了其他麻烦。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个到。 我发现的唯一其他答案是“首先将其设置为Long”,这实际上并没有解决这个问题。 我最初尝试投射,但得到了“ ” 如您所料,我有点困惑,我被困住了,因为有些内容以形式出现,而我要存储其信息的实体要求序列号为Long。 问题答案: 请注意,强制转换为和强制

  • 问题内容: 以下是我的json文件输入 码 输出量 因此,在这里我确实得到了答案,但是没有打印一次,而是打印了7次。如何解决此问题。 问题答案: 是一个字典,您不需要对其进行迭代。您可以使用键直接访问值。 例如: