2017-07-24 29 views
0

我有一些代碼如何攔截的URL文件並將其安裝到郵件

String url = http://site/some-file.pdf 

HttpURLConnection fileRequest = (HttpURLConnection) new URL(fileUrl).openConnection(); 
      Path file = Files.createFile(Paths.get("mydirectory" + "filename" +".pdf")); 
      Files.write(file, IOUtils.toByteArray(fileRequest.getInputStream())); 

此代碼寫入從URL中獲取文件,並將其寫入到我的本地家庭(盤d,例如)

如何使其附加到郵件發件人而不保存在本地?可能嗎?

+0

您可以將文件保存成字節數組,而不是文件系統,然後將其附加到您的郵件。保存文件到字節數組檢查[this](https://stackoverflow.com/questions/2295221/java-net-url-read-stream-to-byte),並將其附加到郵件[this](https: //stackoverflow.com/questions/23083574/mail-attachments-with-byte-array)可能會幫助你。 – zombie

+0

您的意思是替換下面的一段代碼並寫入1.將文件保存到字節數組並將其附加到郵件中? –

+0

是的,代替將文件從該URL保存到D驅動器的代碼,編寫代碼將其保存到'ByteArray []',然後將該'ByteArray []'附加到您的郵件。檢查我提供的幫助鏈接。 https://stackoverflow.com/questions/2295221/java-net-url-read-stream-to-byte 和 https://stackoverflow.com/questions/23083574/mail-attachments-with-byte-array – zombie

回答

0

可以使用javax.activation.URLDataSource

Part attachment = new MimeBodyPart(); 
URL url = new URL("http://site/some-file.pdf"); 
URLDataSource uds = new URLDataSource(url); 
attachment.setDataHandler(new DataHandler(uds)); 
attachment.setDisposition(Part.ATTACHMENT); 
attachment.setFileName(url.getFile()); 

根據文檔,你可以只用DataHandler簡化代碼和URL

Part attachment = new MimeBodyPart(); 
URL url = new URL("http://site/some-file.pdf"); 
attachment.setDataHandler(new DataHandler(url)); 
attachment.setDisposition(Part.ATTACHMENT); 
attachment.setFileName(url.getFile());