我通过单独的(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版本?