如何发送 zip 文件而不在物理位置创建它?

2024-01-22

我想发送带有 zip 文件附件的电子邮件。我可以发送 pdf 文件,而无需使用 ByteArrayOutputStream 将它们保存在物理位置。但是当我尝试压缩这些文件并发送它时它不起作用。它给出了非法附件的异常。

下面是我编写的用于创建 zip 的代码。

private MimeBodyPart zipAttachment( List<ByteArrayOutputStream> attachmentList, List<String> reportFileNames )
{
    MimeBodyPart messageBodyPart = null;
    try
    {
        // File file = File.createTempFile( "Reports.zip",".tmp" );
        // FileOutputStream fout = new FileOutputStream(file);
        ByteArrayOutputStream bout = new ByteArrayOutputStream(attachmentList.size());
        ZipOutputStream zos = new ZipOutputStream( bout );
        ZipEntry entry;
        for( int i = 0; i < attachmentList.size(); i++ )
        {
            ByteArrayOutputStream attachmentFile = attachmentList.get( i );
            byte[] bytes = attachmentFile.toByteArray();
            entry = new ZipEntry( reportFileNames.get( i ) );
            entry.setSize( bytes.length );
            zos.putNextEntry( entry );
            zos.write( bytes );
        }
        messageBodyPart = new MimeBodyPart();
        DataSource source = new ByteArrayDataSource( bout.toByteArray(), "application/zip" );
        messageBodyPart.setDataHandler( new DataHandler( source ) );
        messageBodyPart.setFileName( "Reports.zip" );

    }
    catch( Exception e )
    {
        // TODO: handle exception            
    }
    return messageBodyPart;
}

您忘记在 for 循环末尾写入每个项目后调用 zos.closeEntry() 。 如前所述,您尚未关闭 ZipOutputStream。

我认为您也不需要调用entry.setSize()。

否则,这应该有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何发送 zip 文件而不在物理位置创建它? 的相关文章

随机推荐

  • 为什么结合性是运算符的基本属性,而不是优先级的基本属性

    在任何编程语言教科书中 我们总是被告知该语言中的每个运算符如何具有左结合性或右结合性 结合性似乎是任何运算符的基本属性 无论其需要多少操作数 在我看来 我们可以将任何关联性分配给任何运算符 无论我们如何将关联性分配给其他运算符 但为什么会这
  • 在c++中接收USB设备插入的通知/事件/信号

    我已经寻找了一段时间 但一直无法找到这个问题的答案 我正在尝试接收特定 USB 设备的连接通知 这是我所知道的 我运行的是 linux 内核版本 3 2 我有识别 USB 设备所需的 ID 我创建了一个用于读取和写入设备的内核模块 内核模块
  • 为什么不使用基于二进制补码的浮点?

    float64 32 和 16 的 IEEE 754 标准使用有符号尾数和有偏差指数 作为一名设计硬件架构的学生 对我来说 对有效数和指数部分使用二进制补码更有意义 例如 定义 32 位 半精度 浮点数 第一位表示符号 接下来的 8 位 指
  • 系统子程序和 INT 信号问题

    我的 Perl 脚本中有一个 INT 信号处理程序 当 Perl 脚本处于系统调用过程中发送 INT 时 它不会被执行 为什么 考虑 perl5 12 bin perl E cat lt
  • 仅在首次加载时显示对话框

    我目前有一个对话框 每次加载页面时都会自动显示 但是 我有搜索等功能 因此当用户搜索条目时 由于页面正在再次加载 它将再次显示弹出框 如何才能使对话框仅在第一次加载页面时显示 这是我的对话框的 HTML 代码 div title Instr
  • 会话是否用于 REST 身份验证?

    抱歉这个新手问题 这是我第一次尝试实现 REST 接口 在 PHP 中 无论如何 由于 HTTP 协议的无状态本质 最好的做法是什么才能确保 GET user id friends 总是且仅由当前经过身份验证的用户执行 会话通常用作限制 R
  • 如何在 Linux 中使用 chdir 功能?

    我有一个问题 这是我在 testchdir c 文件中的原始代码 include
  • ios 中的 UIActivityViewController 与 UIDocumentInteractionController

    我刚刚读了一些文章UIActivityViewController and UIDocumentInteractionController在 iOS 中 但我对如何使用它们感到非常困惑 因为两者看起来都是一样的 那么 我什么时候使用UIAc
  • 从参数化触发器插件传回结果

    我有 2 个工作 Helper 和 Main 以及单个 jenkins 实例 即主机和执行器 帮助程序管理第 3 方资源并为主要作业做好准备 准确地说 它为要部署的应用程序进行测试创建环境 辅助作业的唯一工件是一个单独的文件 其中包含专为主
  • 将具有重复键的键值数组转换为具有唯一键和值数组属性的对象数组

    我有一个键 值对数组 键有时会重复 并且每个键的值始终是唯一的 我想将每个唯一的键压缩为一个对象 这样我就有一个键和一个关联值的数组作为属性 有没有方便的 JavaScript 函数可以做到这一点 This pairArray key a
  • 使用 FFmpeg 从大电影创建缩略图需要太长时间

    我正在使用这个 shell 命令从 123 秒的 VIDEO FILE 中制作缩略图并将其保存到 THUMBNAIL FILE 中 ffmpeg i VIDEO FILE r 1 ss 123 f image2 THUMBNAIL FILE
  • 我可以在 GridView 中合并页脚吗?

    我有一个与数据集绑定的 GridView 我有我的页脚 它由列线分隔 我想合并 2 列 我怎么做
  • 将预编译模板与 Handlebars.js 结合使用(jQuery Mobile 环境)

    我在 Handlebars 中的模板预编译方面遇到了一些困难 我的 jQuery Mobile 项目在模板方面变得相当大 我希望预编译我使用的模板 然而 我似乎找不到关于如何使用车把执行此操作的良好解释 例如分步教程 我仍然使用脚本标签将模
  • 如何让只有授权用户才能访问存储在 Amazon S3 中的内容?

    一旦您将内容存储在 S3 中并将其公开 那么每个人都可以访问它 有没有办法让只有授权用户才能访问S3中存储的内容 例如 我有一个允许人们存储文档的网站 服务器将这些文档存储在 S3 中 我希望只有上传该文档的用户才能访问它 我知道我可以将
  • 无法对 DependencyProperty 进行数据绑定

    我有一个带有 DependencyProperty 的 UserControl 我使用数据绑定表达式在主机窗口中设置它的值 但是 它并没有按预期工作 用户控件的代码隐藏片段 public class ViewBase UserControl
  • 带有 JSON 数据的 DataTable

    我正在尝试使用 DataTable 创建一个表 但很难让 DataTable 使用 JSON 对象加载 function getData var request new XMLHttpRequest var json link to my
  • MPMoviePlayerController 与启动 UIWebView 来流电影的优缺点

    我有一位客户拥有 Flash 格式的网络视频内容 我的任务是帮助他们在 iPhone 应用程序中展示视频 我意识到第一步是将这些视频转换为适合 iPhone 的 Quicktime 格式 然后我必须帮助客户弄清楚如何或在哪里托管这些文件 如
  • python列表中的索引错误

    B l append l i A B l 这里是一个列表 我试图向其中附加更多值以使其充当数组 但它仍然给我错误 如列表索引超出范围 如何摆脱它 您的代码存在很多问题 1 the append method 不返回任何内容 所以这样写是没有
  • SQL-如何将 YYYYMM 数字转换为日期

    所以我对 SQL 还很陌生 我有一个充满数字的列 以 YYYYMM 格式列出年份和月份 即 2016 年 7 月的 201607 我想知道是否可以在 SQL 中将其转换为正确的日期格式 我已经做了相当多的研究 并且看到了很多关于将 YYYY
  • 如何发送 zip 文件而不在物理位置创建它?

    我想发送带有 zip 文件附件的电子邮件 我可以发送 pdf 文件 而无需使用 ByteArrayOutputStream 将它们保存在物理位置 但是当我尝试压缩这些文件并发送它时它不起作用 它给出了非法附件的异常 下面是我编写的用于创建