spring文件上传,java堆大小错误

时间:2017-02-06 20:56:16

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

文件上传过程中出现了一些奇怪的错误 文件大小约为300mb ..
当我尝试上传它时,我抓住了内存错误:java堆空间"。 我试图将堆大小增加到3gb,但仍然不够 配置是:
Spring java config,spring jdbctemplate,mysql。
当我尝试使用其他项目上传相同的文件(spring xml config,使用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:将数据库更改为oracle - 它可以正常工作。所以问题出在mysql属性中。?

1 个答案:

答案 0 :(得分:0)

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