Java-从S3存储桶压缩(ZIP)附件并附加到邮件

时间:2018-12-08 10:13:44

标签: java amazon-s3 zip javamail

我通过单独的(csv / html)文件向用户发送邮件,这些文件往往变得很大。如果文件太大,则邮件通常不会到达。因此,我想测试压缩这些文件是否可以改善这一点。目前,我有以下代码:

 // creates message part
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    // messageBodyPart.setContent(mail, "text/html");
    messageBodyPart.setContent(mail, "text/html; charset=UTF-8");
    messageBodyPart.setFileName("file.zip");

    // creates multi-part
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    if (raw_s3_data_files.size() > 0) {

        for (int i = 0; i < raw_s3_data_files.size(); i++) {
            String raw_s3_file_location = raw_s3_data_files.get(i);

            MimeBodyPart attachPart = new MimeBodyPart();

            try {

                S3Object s3obj = s3.returnS3Object(this.bucketName, raw_s3_file_location);

                if (s3obj != null) {
                    ByteArrayDataSource byte_array_data_source = new ByteArrayDataSource(s3obj.getObjectContent(), "text/csv");
                    attachPart.setDataHandler(new DataHandler(byte_array_data_source));
                    attachPart.setFileName(raw_s3_file_location.substring(raw_s3_file_location.indexOf("/") + 1));
                    multipart.addBodyPart(attachPart);
                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

    // sets the multi-part as e-mail's content
    msg.setContent(multipart);

    // sends the e-mail
    Transport t = new AWSJavaMailTransport(session, null);
    t.send(msg);

我可以附加3个单独的ZIP文件,但一个大ZIP也可以。我确定了以下代码:

public static byte[] zipBytes(String filename, byte[] input) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    ZipEntry entry = new ZipEntry(filename);
    entry.setSize(input.length);
    zos.putNextEntry(entry);
    zos.write(input);
    zos.closeEntry();
    zos.close();
    return baos.toByteArray();
}

但是这与ByteArrayOutputStream而不是我使用的ByteArrayDataSource一起使用。有没有办法从每个文件中获取ZIP版本?

0 个答案:

没有答案