我曾将一个文件保存到数据库(postgresql)中,它运行良好。但当我尝试上传多个文件时,我被卡住了。
我的jsp文件上传:
<input type="file" id="reqFile" name="attachments.myFile" multiple/>
这是我的行动方法:
public String SaveAttachments() throws SQLException, IOException {
int case_id = (Integer) session.get("case_id");
System.out.println("in save attachments()");
int uploaded_by = 1;
try {
File destFile = new File(attachments.getMyFileFileName());
FileUtils.copyFile(attachments.getMyFile(), destFile);
fis = new FileInputStream(destFile);
currentCon = ConnectionManager.getConnection();
pstmt = (PreparedStatement) currentCon.prepareStatement("insert into case_attachments(case_id, attachment, attachment_title, upload_date, uploaded_by) values(?,?,?,current_date,?)");
pstmt.setInt(1, case_id);
pstmt.setBinaryStream(2, fis, (int) destFile.length());
pstmt.setString(3, attachments.getMyFileFileName());
pstmt.setInt(4, uploaded_by);
pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("Error From SaveAttachments :" + e);
}
return SUCCESS;
}
当我附加多个文件时,它以逗号分隔的格式进入数据库的同一列。当用户附加多个文件时,如何将文件保存在不同的行中?提前谢谢。
您可以像这里描述的那样上传多个文件,然后只需循环它们并一次将它们插入数据库中。
您只需要决定是使用业务层还是直接从Action中执行插入作业(不是最佳实践…),以及是将所有文件放在单个事务中,还是将每个文件放在自己的事务中。
请记住,HTML5multiple属性应该是multiple="multiple"
,而不仅仅是multiple
(尽管大多数浏览器即使在"怪癖"时也能正确处理)。
使用数组进行多次上传。
<td><input type="file" name="file[]" class="multi" id="reqFile"></td>