Servlets 读取从servlet下载的.msg文件时出错
我已经编写了一个servlet,它使用读取outlook.msg文件,并将内容写入ServletOutputStream,以便在点击url后可以下载它 我面临的问题是,当我尝试在outlook中打开下载的文件时,该文件报告了一个错误 错误说明:无法打开该文件,因为该文件可能不存在,或者您可能没有访问该文件的权限……Servlets 读取从servlet下载的.msg文件时出错,servlets,outlook,outputstream,msg,Servlets,Outlook,Outputstream,Msg,我已经编写了一个servlet,它使用读取outlook.msg文件,并将内容写入ServletOutputStream,以便在点击url后可以下载它 我面临的问题是,当我尝试在outlook中打开下载的文件时,该文件报告了一个错误 错误说明:无法打开该文件,因为该文件可能不存在,或者您可能没有访问该文件的权限…… 即使文件的格式正确(.msg),也会出现这种错误。我确信我在解析时出错了。请建议。以下是servlet代码: MsgParser msgp = new MsgParser();
即使文件的格式正确(.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是一种商业产品,我必须在较低的级别上使用它,因此我们正在考虑一些开源解决方案。