我正在尝试学习如何将附件从我的gmail保存到Oracle数据库BLOB服务器端。
这是我的代码的一部分:
static void InsertAttachment(String i_in, Message message)
throws SQLException, IOException, MessagingException
{
Object content = message.getContent();
if (content instanceof Multipart)
{
Multipart multipart = (Multipart)message.getContent();
for (int i=0, n=multipart.getCount(); i<n; i++)
{
Part part = multipart.getBodyPart(i);
String disposition = part.getDisposition();
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
{
String fileName = i_in+"_"+part.getFileName().replace(' ','_');
String contentType = part.getContentType();
String mimeType = contentType.substring(0,contentType.indexOf(";"));
InputStream inStream = part.getInputStream();
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
PreparedStatement pstmt = conn.prepareStatement("update email_table set blob = ? where id = ?");
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] tempBuffer = new byte[1]; // 1 B
int numRead;
while ((numRead = inStream.read(tempBuffer)) != -1) {
outStream.write(tempBuffer);
}
byte[] attachment = outStream.toByteArray();
pstmt.setBinaryStream(1, new ByteArrayInputStream(attachment),attachment.length);
pstmt.setString(2, i_in);
pstmt.executeUpdate();
conn.commit();
pstmt.close();
}
}
}
}
它可以编译并正常运行。此外,所有文本文件都已加载,没有任何问题。我可以阅读并保存它们,但是此代码将所有图像或pdf附件保存为null。
我通过loadjava实用程序上载Java Source,并创建pl / sql函数以在Oracle数据库上运行此代码。我目前使用的是Oracle Database 12.2。
我是这个主题的新手,您能帮助我理解问题所在吗?
更新:
使用MT0的建议我尝试下载attachmens以避免数据库。
我使用了以下代码:
static void InsertAttachment(String i_in, Message message)
throws SQLException, IOException, MessagingException
{
Object content = message.getContent();
if (content instanceof Multipart)
{
Multipart multipart = (Multipart)message.getContent();
for (int i=0, n=multipart.getCount(); i<n; i++)
{
Part part = multipart.getBodyPart(i);
String disposition = part.getDisposition();
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()))
{
String fileName = i_in+"_"+part.getFileName().replace(' ','_');
String contentType = part.getContentType();
String mimeType = contentType.substring(0,contentType.indexOf(";"));
//new code starts here
String destFilePath = "D:/Attachment/" + part.getFileName();
FileOutputStream output = new FileOutputStream(destFilePath);
InputStream input = part.getInputStream();
byte[] buffer = new byte[1];
int byteRead;
while ((byteRead = input.read(buffer)) != -1) {
output.write(buffer, 0, byteRead);
}
output.close();
}
}
}
}
此代码成功保存了所有文件。
因此,问题与该代码在服务器上的行为有关。