gpt4 book ai didi

javafx - 将 Outlook 电子邮件拖到 JavaFX 应用程序中

转载 作者:行者123 更新时间:2023-12-05 06:41:12 24 4
gpt4 key购买 nike

我制作了一个 Javafx 场景来处理拖放,例如,如果您从 Windows 资源管理器或桌面拖动文件,它工作正常。

但是,如果我尝试从 Outlook 执行此操作,行为会很奇怪。

我意识到,当您从拖板组件内的另一个程序拖放 n 时,方法“getContentTypes”将使用以下代码返回一些 DataFormat 对象:

dragField.setOnDragOver((DragEvent event) -> {
Dragboard db = event.getDragboard();
System.out.println(db.getContentTypes());
});

输出会是这样的:

[text/plain] - De Objet Reçu Taille Catégories D D Test 13:56 40 Ko [DragImageBits] - java.nio.HeapByteBuffer[pos=0 lim=90304 cap=90304] [message/external-body;access-type=clipboard;index=0;name="testEmail.msg"] - null [Object Descriptor] - java.nio.HeapByteBuffer[pos=0 lim=74 cap=74] [RenPrivateItem] - null [CSV] - java.nio.HeapByteBuffer[pos=0 lim=282 cap=282]

它似乎能够从 Outlook msg 文件中提取信息,因为我得到了类似标题的内容,而且“testEmail.msg”文件名是正确的。

但是,当我尝试使用这段代码时:

DataFormat.lookupMimeType("message/external-body;access-type=clipboard;index=0;name=\"testEmail.msg\"");

返回null...其实mime-type这边有一个“null”

有什么方法可以将这些 DataFormat 对象转换为 java 文件或者 apache poi msg 文件吗?任何事情都会很棒。

感谢您的帮助! :D

最佳答案

如果有以message/external-body;access-type=clipboard开头的mime类型,可以使用

clipboard.getContent(new DataFormat("message/external-body"));

这里是一个只保存文件的例子:

    private boolean clipboardHasInMemoryFile(Clipboard clipboard) {
for (DataFormat d: clipboard.getContentTypes()) {
if (d.toString().startsWith("[message/external-body;access-type=clipboard")) {
return true;
}
}
return false;
}

public void saveOutlookFile() throws IOException {
Clipboard clipboard = Clipboard.getSystemClipboard();
if (clipboardHasInMemoryFile(clipboard)) {
//this is for copying an outlook attachment
String name = "outfile";
for (DataFormat d : clipboard.getContentTypes()) {
if (d.toString().startsWith("[message/external-body;access-type=clipboard")) {
Pattern p = Pattern.compile("name=\"([^\"]*)\"");
Matcher m = p.matcher(d.toString());
m.find();
name = m.group(1);
break;
}
}
Object inMemoryFile = null;
try {
DataFormat df = DataFormat.lookupMimeType("message/external-body");
if (df == null) {
df = new DataFormat("message/external-body");
}
inMemoryFile = clipboard.getContent(df);
} catch (Throwable t) {

}
final String fileName = name;
if (inMemoryFile != null) {
if (inMemoryFile instanceof ByteBuffer) {
ByteBuffer b = (ByteBuffer) inMemoryFile;
byte bytes[] = b.array();
FileOutputStream fo = new FileOutputStream(fileName);
fo.write(b.array());
fo.close();
}
}
}
}

关于javafx - 将 Outlook 电子邮件拖到 JavaFX 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171840/

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