想把前端通过网页上传的文件写入 mysql,后台用的公司的框架(基于 spring+mybatis),数据库表字段类型用 longblob,实体类字段类型用 byte[];
文件较小的时候读写都没问题,但文件稍微大点写入就报错,试了下大概大于 128M 就不行了
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
at java.lang.StringBuilder.append(StringBuilder.java:136)
...(从这里开始的报错来自框架)
通过本地调试,发现后台在接收完文件准备写入数据库阶段报错,在这阶段任务管理器的"java.exe"进程从 1000MB+飙到 2000MB+,试着添加 JVM 参数-Xmx2048m 还是不行…
我才写入一个 100M+的文件怎么内存就占这么多了… mysql 的 longblob 可以存 4G,这么大的文件一般是怎么读写的啊?有没有办法像流那样从开始接收文件时就写入数据库,边读边写,并且可以事务控制?
求大佬给点思路或者有没有现成的轮子可以用…
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.