Servlets 读取从servlet下载的.msg文件时出错

Servlets 读取从servlet下载的.msg文件时出错,servlets,outlook,outputstream,msg,Servlets,Outlook,Outputstream,Msg,我已经编写了一个servlet,它使用读取outlook.msg文件,并将内容写入ServletOutputStream,以便在点击url后可以下载它 我面临的问题是,当我尝试在outlook中打开下载的文件时,该文件报告了一个错误 错误说明:无法打开该文件,因为该文件可能不存在,或者您可能没有访问该文件的权限…… 即使文件的格式正确(.msg),也会出现这种错误。我确信我在解析时出错了。请建议。以下是servlet代码: MsgParser msgp = new MsgParser();

我已经编写了一个servlet,它使用读取outlook.msg文件,并将内容写入ServletOutputStream,以便在点击url后可以下载它

我面临的问题是,当我尝试在outlook中打开下载的文件时,该文件报告了一个错误

错误说明:无法打开该文件,因为该文件可能不存在,或者您可能没有访问该文件的权限……


即使文件的格式正确(.msg),也会出现这种错误。我确信我在解析时出错了。请建议。以下是servlet代码:

MsgParser msgp = new MsgParser(); 

    Message msg = msgp.parseMsg("D:\\Demo.msg");

    String str1=msg.toString(); 

    byte[] b=str1.getBytes();// here b is byte array 

    //The below code is to open show the pop up so that user can save the msg file.. 

    response.setContentType("application/vnd.ms-outlook"+" ;charset=utf-8"); 

    response.setHeader("Content-Disposition","attachment;filename=" + "Demo.msg"); 

    ServletOutputStream servletOutputStream = response.getOutputStream(); 


    DataOutput dataOutput = new DataOutputStream(servletOutputStream); 

    if (b!= null) { 
        response.setContentLength(b.length); 

        for (int i = 0; i < b.length; i++) { 
            dataOutput.writeByte(b[i]); 
        } 

    } 
    if (servletOutputStream != null) { 

        servletOutputStream.flush(); 

        servletOutputStream.close(); 
    } 
    PrintWriter pw = response.getWriter();
    pw.println(dataOutput);
MsgParser msgp=new MsgParser();
消息msg=msgp.parseMsg(“D:\\Demo.msg”);
字符串str1=msg.toString();
字节[]b=str1.getBytes();//这里是字节数组
//下面的代码将打开并显示弹出窗口,以便用户可以保存msg文件。。
response.setContentType(“application/vnd.ms outlook”+“charset=utf-8”);
response.setHeader(“内容处置”、“附件;文件名=“+”Demo.msg”);
ServletOutputStream ServletOutputStream=response.getOutputStream();
DataOutput DataOutput=新的DataOutputStream(servletOutputStream);
如果(b!=null){
response.setContentLength(b.length);
对于(inti=0;i
如果可能,将同步中的字段PR\u RTF\u设置为FALSE:

message.setRtfInSync(false)


我不使用msgparse,但可以使用另一个库(JMSG)设置此字段,这将解决“无法打开文件,因为它可能不存在,或者您可能无权访问文件”

,即使文件格式正确(.msg)”。文件扩展名不足以说明格式正确。使用文本查看器或编辑器打开文件并检查其内容。但是这是权限错误,不是格式错误。是的!我用记事本++检查了内容,内容是正确的。但当我双击它在outlook中打开时,它仍然报告了错误。请有人解释一下。。。这会有帮助的
MsgParser
只是没有返回有效
.msg
-流的功能。您正在使用的
toString
方法并不是您所期望的那样:它只是返回人类可读的文本。您必须使用
POIFS
-库将
消息
转换为有效的
.msg
-数据流。我在POIFS库中没有看到任何实现此要求的方法。请提供一些链接或文档以实现此目的。JMSG是一种商业产品,我必须在较低的级别上使用它,因此我们正在考虑一些开源解决方案。