从电子邮件附件将图像和PDF加载到BLOB

时间:2018-12-16 09:46:22

标签: java oracle plsql

我正在尝试学习如何将附件从我的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();
           }
        }
    }
}

此代码成功保存了所有文件。

因此,问题与该代码在服务器上的行为有关。

0 个答案:

没有答案