Я пытаюсь научиться сохранять вложения из моего почтового ящика в Oracle Database 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 сохраняются в этом коде как ноль.
Я загружаю Java Source с помощью утилиты loadjava и создаю функцию pl / sql для запуска этого кода в Oracle Database.В настоящее время я использую Oracle Database 12.2.
Я новичок в этой теме, не могли бы вы помочь мне понять, в чем проблема?
ОБНОВЛЕНИЕ:
Использование рекомендаций MT0 I 'Я пытался скачать приложения, избегая базы данных.
Я использовал этот код:
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();
}
}
}
}
Все файлы были успешно сохранены этим кодом.
Итак, проблема связана с поведением этого кода на сервере.