【发布时间】:2021-03-15 16:22:56
【问题描述】:
在我的应用程序中,我查阅了来自 Outlook 的电子邮件。我将它们与附件一起保存到硬盘驱动器。效果很好:
atcments : OLEVariant;
...
atcments := itemOL.Attachments.Count;
for counter := 1 to atcments do
begin
attfilename := Copy (('My file ' + itemOL.Attachments.item(counter).FileName), 0, 120);
itemOL.Attachments.item(counter).SaveAsFile(ExtractFilePath(Application.ExeName) + '\ MyFolder \' + attfilename);
end;
现在,我想使用 Indy 组件将附件保存到 FTP 服务器。连接FTP服务器后,我把最后一行改成:
IdFTP1.Put (itemOL.Attachments.item(counter).FileName, attfilename);
但是不起作用,文件没有保存在FTP服务器中。
有没有办法把附件直接保存到FTP服务器上,不用先保存到硬盘再发送到FTP服务器上?
【问题讨论】:
-
"它不起作用" - 究竟是什么方式?你有错误吗?空白文件?请更具体。我看到的一个问题是您的原始代码处理绝对路径,但您的非工作代码处理的是相对路径。 “保存附件...而不通过...硬盘” - 没有磁盘文件,
TIdFTP支持上传的唯一其他选项是TStream,但我明白了无法访问每个附件的原始数据以放入流中,因此您必须使用磁盘文件。 -
谢谢雷米。运行时我收到一条错误消息,提示无法打开路径 xxxx 中的文件。我会听从你的建议:浏览磁盘文件,然后将它们发送到 FTP 服务器。唯一的问题是:如果附件很大,在FTP服务器上保存这个文件需要很长时间。我别无选择,所以我将使用磁盘文件。
-
报错信息:“xx项目引发异常类”EFOpenError”,提示“无法打开文件:”D:\My file.pdf“找不到指定文件”
-
嗯,这应该告诉你你没有正确使用文件路径,所以我建议你仔细检查你的输入和逻辑。您提供给
IdFTP1.Put()的文件路径错误。 -
是的,你给
IdFTP1.Put ()的文件路径不正确。无法直接从 Outlook 获取原始数据(附加文件)。