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

上传大文件Spring WebFlow

刘明朗
2023-03-14

我想将文件上载到minio文件容器
较小的文件按预期使用此代码:

private Mono<Boolean> saveFileToMinio(FilePart filePart) {
    log.info("About to save database to minio container...");
    Mono<Boolean> result = Mono.from(
            filePart.content().flatMap(dataBuffer -> {
                        var bytes = dataBuffer.asByteBuffer().array();
                        dataBuffer.read(bytes);
                        DataBufferUtils.release(dataBuffer);
                        return Flux.just(bytes);
                    })
                    .flatMap(databaseFileService::write)
                    .then(Mono.just(true))
                    .onErrorMap(throwable -> {
                        log.error(throwable.getMessage(), throwable);
                        return throwable;
                    }));
    log.info("Successfully saved database to minio container...");
    return result;
}

我需要为要上传的minio服务提供一个byte[]
较小的文件按预期工作(将存储到容器中)。但是较大的文件(在我的测试中为12 MB)不起作用。

我得到了这个例外:
java.lang.IndexOutOfBoundsException: readPotion0和长度1024应该小于WritePotion808

共有1个答案

柯昱
2023-03-14

我尝试了一个建议,即数据缓冲区(DataBufferUtils)。从另一个SO帖子加入。这有点奇怪,但我认为以下代码可以做到这一点:

private Mono<Boolean> saveFileToMinio(FilePart filePart) {

    var result = DataBufferUtils.join(filePart.content()).map(dataBuffer -> {
                var bytes = dataBuffer.asByteBuffer().array();
                dataBuffer.read(bytes);
                DataBufferUtils.release(dataBuffer);
                return bytes;
            }).map(databaseFileService::write).then(Mono.just(true))
            .onErrorMap(throwable -> {
                log.error(throwable.getMessage(), throwable);
                return throwable;
            });
    log.info("Successfully saved database to minio container...");
    return result;
}

尤其是这一行似乎很有用:DataBufferUtils.join

我不知道为什么,但这似乎奏效了。

编辑:
查找上述静态连接将参数maxByteCount设置为-1。也许另一个(不适用于较大文件的函数)设置了一些限制。但我不知道。

 类似资料:
  • 本文向大家介绍PHP文件上传问题汇总(文件大小检测、大文件上传处理),包括了PHP文件上传问题汇总(文件大小检测、大文件上传处理)的使用技巧和注意事项,需要的朋友参考一下 由于涉及到本地和服务器两方面的安全问题,所以基于input type="file"形式的页面文件上传一直处于一个很尴尬的位置。一方面,用户不希望隐私泄露,所以浏览器无法对用户在上传时选择的文件做有效的判 断。另一方面,为了服务器

  • 问题内容: 我有一个无法访问的PC上托管的网站。我有一个上传表单,允许人们上传最大30MB的mp3文件。我的服务器端脚本是用PHP完成的。 每次尝试上传文件时,都会收到一条错误消息,声称文件超出了允许的最大大小,因此我需要增加大小。我在网络上的研究建议更改我无权访问的文件,这样将无法正常工作。其他人建议我将自定义文件添加到我的根目录中,该文件无效。还有其他建议吗? 问题答案: 您需要设置的值,并在

  • 问题内容: 我已经做了很多研究,找到了.NET的上载组件,可以用来上载大文件,具有进度条并可以继续上载大文件。我遇到了一些组件,例如AjaxUploader,SlickUpload和PowUpload,仅举几例。这些选项中的每一个都需要花钱,只有PowUpload可以执行断点续传,但是它使用Java applet来完成。我愿意为一个能够很好地完成这些工作的组件付费,但是如果我自己编写,那将是最好的

  • 问题 如何限定上传文件的大小? Solution web.py 使用cgi 模块来解析用户的输入, 而 cgi 模块对最大输入大小有限制。 下面的代码限制了最大数据输入为 10MB. import cgi # Maximum input we will accept when REQUEST_METHOD is POST # 0 ==> unlimited input cgi.maxlen =

  • 问题内容: 在使用JavaScript上传 文件 之前,有什么方法可以检查 文件大小 吗? 问题答案: 是的 ,有些现代浏览器支持W3C的一项新功能[FileAPI。可以将其用于此目的,并且很容易测试它是否受支持,如果不支持,则可以回退到其他机制(如果需要)。 这是一个完整的示例: 而这里是它的行为。尝试使用最新版本的Chrome或Firefox。 稍微偏离主题,但是:请注意,客户端验证不能替代服

  • 问题内容: 我有一个允许用户上传视频文件的网站,但我希望将文件大小限制为2MB,这在上传文件后非常简单,但是没有人知道我是否可以 在 上传 之前 检查文件大小,以免超载服务器不必要? 我可能正在寻找javascript / ajax解决方案,但是我不知道如何实现此目的。 任何帮助将非常欢迎。多谢你们! 更新: 我需要在 客户端 而不是在 服务器 端 检查文件大小,这可能吗? 问题答案: 您可以使用