2011-07-07 15 views
0

jsp、サーブレット、そしてすべての楽しいものを使ってアプリケーションを構築しています。今は、フォームから、JavaMail APIを使用して送信されるHTML電子メールにすべての情報を渡すフォームがあります。それは動作しますが、私は、添付ファイルを送信しようとしています、と私はそれが今セットアップした方法では動作しません...JavaMailでローカル以外の添付ファイルを送信するには

<div class="section">Upload Files: <input id="fileUpload" type="file" /></div> 

私は、この入力の値を取り、私のサーブレットにそれを通過してにしてみてください電子メールを送信します。問題は、ファイルが送信されているとき、このタグがそのパスを与えるので、サーブレットはファイルを見つけることができないということです。どんな助けも驚くべきでしょう。

+0

あなたはファイルのアップロードを処理するために何を使用していますか? @MultipartConfigまたはApache Commons Fileupload?私はあなたが「入力値を取る」ということは何を意味するのか分かりません。フォームフィールド自体は何も役に立たないでしょう。あなたのコードの一部を投稿できますか? – Perception

+0

@Perception入力フィールドは、私がアップロードを処理するために使用しているものです。それは基本的にファイルを取得してフィールドとして渡すようですが、明らかにローカルファイルに対してのみ機能します。私はちょうどその入力フィールドから値を取って、今すぐ通過します。私は、ファイルをアップロードして、代わりにJavaを使ってそのように処理するものを見つけようとしています。何か案は? – banjokaboom

+0

私は参照してください。そしてあなたは、あなたが送信する電子メールの添付ファイルとして使用するために、自分のコンピュータからファイルをアップロードすることができるようにこれを使用したいですか? – Perception

答えて

1

私はそれを理解しました。偽のパスは、ブラウザのセキュリティ機能でした。 Tomcatを使用しても、ファイルは実際にtomcatフォルダ内のtempフォルダに格納されます。だから私はちょうどtomcatライブラリ、commons.fileuploadで遊ばなければならなかった、私は偽のパスの場所にかかわらず、ファイルからデータをプルするのに使った。

//Handle File Upload for the attachment 
      ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory()); 

      try{ 
      List fileItemsList = servletFileUpload.parseRequest(request); 

      //TODO: Take datafile input from the field and pass the file name so that we can view the file name 

      Iterator it = fileItemsList.iterator(); 
      while (it.hasNext()){ 
       FileItem fileItem = (FileItem)it.next(); 
       if (fileItem.isFormField()){ 
       /* The file item contains a simple name-value pair of a form field */ 
       } 
       else{ //do what you want with the file} 

私はそれを自分のメールユーティリティに渡し、ファイルの名前を正しい名前に変更して正しい拡張子を付けるようにしました。もちろん、フォームをマルチパートフォームとしてエンコードする必要があります。また、Mime Messageのマルチパートも作成する必要があります。しかし、それはかなり単純です。

MimeBodyPart textPart = new MimeBodyPart(); 
    textPart.setContent(body, "text/html"); 



    MimeBodyPart attachFilePart = new MimeBodyPart(); 
    FileDataSource fds = 
     new FileDataSource(file); 
    attachFilePart.setDataHandler(new DataHandler(fds)); 
    attachFilePart.setFileName(fileName); 


    Multipart mp = new MimeMultipart(); 
    mp.addBodyPart(textPart); 
    mp.addBodyPart(attachFilePart); 
関連する問題