我正在使用JavaMail API創建電子郵件客戶端。一切工作正常,如我能夠連接到郵件服務器(使用IMAP),刪除郵件,檢索收到的郵件,並顯示給用戶等。無法使用JavaMail下載Java附件的PDF附件
現在問題來了,當下載「PDF附件」。 PDF文件沒有完全下載...它缺少一些包含。
如果某些PDF附件的大小爲38 Kb,當我使用IE或任何其他Web瀏覽器下載附件時,但是使用我的java代碼下載時,它的大小爲37.3 Kb。它是不完整的 因此,當我嘗試使用Adobe Reader時它顯示錯誤消息,打開它的「文件已損壞......」
這是我寫下載附件代碼:
public boolean saveFile(String filename,Part part) throws IOException, MessagingException {
boolean ren = true;
FileOutputStream fos = null;
BufferedInputStream fin = null;
InputStream input = part.getInputStream();
File pdffile = new File("d:/"+filename);
try{
if(!pdffile.exists()){
fos = new FileOutputStream(pdffile);
fin = new BufferedInputStream(input);
int size = 512;
byte[] buf = new byte[size];
int len;
while ((len = fin.read(buf)) != -1) {
fos.write(buf, 0, len);
}
input.close();
fos.close();
}else{
System.out.println("File already exists");
}
}catch(Exception e){
ren = false;
}
return ren;
}
上午我錯過了什麼?任何有用的幫助表示讚賞。
如果使用會發生什麼[MimeBodyPart的#saveFile的(文件)](http://javamail.kenai.com/nonav/ javadocs/javax/mail/internet/MimeBodyPart.html#saveFile(java.io.File))或採用字符串的等效方法?如果失敗了,我會嘗試聯繫Bill Shannon(JavaMail開發人員,他經常訪問[forums.oracle.com上的JavaMail論壇](https://forums.oracle.com/forums/forum.jspa?forumID=975) )。 –
BTW:指定你正在使用的JavaMail版本也是有幫助的,我記得如果BASE64編碼對在緩衝區的邊界上,對於一些較早的版本,解碼附件時有一些問題(跳過字節)。 –
@MarkRotteveel是的,我已經使用MimeBodyPart的savefile(文件)方法,但它也失敗了,它的結果相同(在結束時跳過一些字節),我正在使用JavaMail 1.4.4。謝謝.. – Shantanu