spring文件上传,java堆大小错误
spring file upload, java heap size error
我在上传文件时遇到一些奇怪的错误。
文件大小约为 300mb..
当我尝试上传它时,我发现 "out of memory error: java heap space"。
我尝试将堆大小增加到 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});
}
}
更新: 评论添加文件内容。现在整个过程需要 ~500mb(我想是为了将文件上传到控制器)
update2: 将 db 更改为 oracle - 它有效。所以问题出在 mysql 属性中..?
使用 MultipartFile.getInputStream() 和 MultipartFile.getSize() 以及匹配的 SqlLobValue 构造函数。
我在上传文件时遇到一些奇怪的错误。
文件大小约为 300mb..
当我尝试上传它时,我发现 "out of memory error: java heap space"。
我尝试将堆大小增加到 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});
}
}
更新: 评论添加文件内容。现在整个过程需要 ~500mb(我想是为了将文件上传到控制器)
update2: 将 db 更改为 oracle - 它有效。所以问题出在 mysql 属性中..?
使用 MultipartFile.getInputStream() 和 MultipartFile.getSize() 以及匹配的 SqlLobValue 构造函数。