【问题标题】:spring file upload, java heap size errorspring文件上传,java堆大小错误
【发布时间】:2017-02-06 20:56:15
【问题描述】:

我在文件上传过程中遇到了一些奇怪的错误。
文件大小约为 300mb..
当我尝试上传它时,我发现“内存不足错误:java 堆空间”。 我尝试将堆大小增加到 3gb,但仍然不够。
配置是:
Spring java 配置,spring jdbctemplate,mysql。
当我尝试使用其他项目(spring xml 配置、使用 executefunction 上传、oracle)上传相同的文件时,它从堆中占用 900mb 并成功上传。
任何想法发生了什么或有关如何找到问题的任何提示?

  @RequestMapping(value = {"/add_file"}, method = {RequestMethod.POST}/*,
        params = {"file","path","parent_id"}*/)
public String addFile(
        @RequestParam("file") MultipartFile file,
        @RequestParam("parent_id") int parent_id,
        @RequestParam("path") String path,
        @RequestParam("id") int id
) {
    try {
        if (id == -1) fileDAO.addFile(file.getOriginalFilename(), file.getBytes(), parent_id);
        else fileDAO.updateFile(id, file.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "redirect:" + path;
}
/* dao function */
        @Override
    public void addFile(String name, byte[] blob, int folder_id) {
        if (folder_id == 0) {
            jdbcTemplate.update("insert into file(name, content) VALUES(?,?)",
                    new Object[]{name, new SqlLobValue(blob)},
                    new int[]{Types.VARCHAR, Types.BLOB});
        } 
}

更新:评论 addFile 内容。现在整个过程大约需要 500mb(我想是为了将文件上传到控制器)

update2: 将 db 更改为 oracle - 它可以工作。所以问题出在mysql属性..?

【问题讨论】:

标签: java spring spring-mvc heap-memory apache-commons-fileupload


【解决方案1】:

使用 MultipartFile.getInputStream() 和 MultipartFile.getSize() 以及匹配的 SqlLobValue 构造函数。

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多