gpt4 book ai didi

java - 如何将大文件(在线存储)附加到电子邮件而不将整个文件复制到内存

转载 作者:行者123 更新时间:2023-12-01 12:25:03 24 4
gpt4 key购买 nike

如何使用 Java Mail API 发送包含大附件 (~25 MB) 的电子邮件?附件是我们的云存储提供商(Google 云存储)在线存储的文件。该服务的 API 为每个文件返回一个 InputStream 对象或一个 ReadableByteChannel 对象。

我无法使用 ByteArrayDataSource 创建 MimeBodyPart,因为它会创建驻留在内存中的整个文件的副本,并且我们会收到 OutOfMemoryError

如果它是物理文件,我们可以创建一个 FileDataSource 对象并附加到电子邮件。但是我们可以使用 InputStream 对象来做到这一点吗?

我无法增加堆大小,因为将其增加到 25MB 似乎是一个非常糟糕的主意。如果您还有其他想法,请告诉我。我们正在开发 Google App Engine 平台。

最佳答案

尝试javax.activation.URLDataSourcejavax.activation.FileDataSource反而。否则,您可以创建自己的 DataSource适配器类直接返回给定的InputStream。

public class InputStreamDataSource implements javax.activation.DataSource {

private final InputStream in;

public InputStreamDataSource(final InputStream in) {
if (in == null) {
throw new NullPointerException();
}
this.in = in;
}

@Override
public InputStream getInputStream() throws IOException {
return in;
}

@Override
public OutputStream getOutputStream() throws IOException {
throw new IOException();
}

@Override
public String getContentType() {
return "application/octet-stream";
}

@Override
public String getName() {
return "some name";
}
}

关于java - 如何将大文件(在线存储)附加到电子邮件而不将整个文件复制到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26429695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com