Skip to content
This repository was archived by the owner on Jul 16, 2024. It is now read-only.

如何使用 rsocket 上传文件 #249

@sdack-cloud

Description

@sdack-cloud
  • 这个问题我知道和这个项目没有关系,但是在spring-framework 提的问题被关闭,让在stackoverflow提问,但是stackoverflow 关于rsocket问题热点很低。所以来此求助(chatgpt 我也问了)

  • 第二个问题是关于alibaba-rsocket-broker 的。就是接收到的文件数据怎么传递给 broker 的 service 端进行保存

接收 130KB 时,这是可能的,但如果大于 130Kb 则会出错

Kotlin

    @MessageMapping("/upload")
    fun upload(@Payload fileData: ByteArray?): Mono<String> {

        println("========= OK")
        println("========= OK "+ fileData!!.size)
        val uploadFile = File("/Users/Downloads/uploaded_file.png")

        return Mono.just("ok").doOnSuccess {

            try {
                FileOutputStream(uploadFile).use { fos ->
                    fos.write(fileData!!)
                }
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }
    }

我使用 srocket-js 上传文件

 upload(file) {
        let route = encodeRoute("/upload");
        let compositeMetaData = encodeCompositeMetadata([
          [WellKnownMimeType.MESSAGE_RSOCKET_ROUTING, route]
       ]);


        const reader = new FileReader();
        reader.onload = (event) => {
          let result = event.target.result as ArrayBuffer;
          console.log(result)


        this.socket.requestResponse({data: Buffer.from(result), metadata: compositeMetaData}, {
          onComplete(): void {
          }, onError(error: Error): void {
            console.error("Error", error);
          }, onExtension(extendedType: number, content: Buffer | null | undefined, canBeIgnored: boolean): void {
          }, onNext(payload: Payload, isComplete: boolean): void {
            console.log("OK", isComplete);
            console.log("payload", payload.data);

          }
        })
        }
        reader.readAsArrayBuffer(file);
      }

这张图片只有一部分
uploaded_file

使用 Spring boot 的 PostMapping 可以上传大视频文件。(超过1G,并传回,postman测试)

    @PostMapping("/upload")
    fun upload(@RequestPart file: FilePart): Flux<DataBuffer> {
        println(file.filename())
        return file.content()
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions