2012-03-29 13 views
0

Liferay Web Formポートレットをカスタマイズしてファイルのアップロードを許可しようとしていますが、送信する電子メールにファイルを添付する以外はすべて機能しています。commons-fileuploadとLiferayに関する問題

フォームからフィールドを取得:

public void saveData(ActionRequest actionRequest, ActionResponse actionResponse) { 

... 

File uploadedFile = null; 

... 

Map<String,String> fieldsMap = new LinkedHashMap<String,String>(); 

// Create a FileItemFactory for disk-based file items 
DiskFileItemFactory factory = new DiskFileItemFactory(1073741824, new File("/temp")); 

// Create a new file upload handler 
PortletFileUpload upload = new PortletFileUpload(factory); 
upload.setSizeMax(67108864); 

// Parse the request 
List<FileItem> items = upload.parseRequest(actionRequest); 

int i = 1; 

Iterator iter = items.iterator(); 

// Throw away the hidden field, don't need it 
FileItem dud = (FileItem)iter.next(); 

while (iter.hasNext()) { 

    FileItem item = (FileItem)iter.next(); 

    String fieldLabel = preferences.getValue(
     "fieldLabel" + i, StringPool.BLANK); 

    String fieldType = preferences.getValue(
      "fieldType" + i, StringPool.BLANK); 

    if (Validator.isNull(fieldLabel)) { 
     break; 
    } 

    if(!fieldType.equals("file")) { 
     String fieldValue = item.getString(); 
     fieldsMap.put(fieldLabel, fieldValue); 
    } else { 
     String fieldName = item.getName(); 
     uploadedFile = new File(fieldName); 
     item.write(uploadedFile); 
    } 
     i++; 
} 
... 

    if(sendAsEmail) { 
     emailSuccess = sendEmail(fieldsMap, preferences, uploadedFile); 
    } 
} 

そして建設や電子メールの送信:

protected boolean sendEmail(Map<String, String> fieldsMap, PortletPreferences preferences, File uploadedFile) { 

    MailMessage mailMessage = new MailMessage(fromAddress, toAddress, subject, body, false); 

    if(uploadedFile != null) { // i.e., there was 'file' field up above 
     mailMessage.addAttachment(uploadedFile); 
    } 

    MailServiceUtil.sendEmail(mailMessage); 


    if(uploadedFile != null) { 
     uploadedFile.delete(); 
    } 

} 

ファイルアップロードを処理して添付しようとしたとき、私は次のコンソールエラーが発生しますファイルにメッセージ:

16:09:49,597 ERROR [MailEngine:489] IOException while sending message 
16:09:49,598 ERROR [MailEngine:154] java.io.FileNotFoundException: helpdesk_.png (No such file or directory) 

私はを持っていますか?が正しく設定されていますか?私は何が間違っていますか?

ありがとうございました。

答えて

0

MailServiceUtilサブシステムは実際のメール送信を行うためにスレッドを回転させ、返るのを待たない(したがってスレッド)ようです。だから、MailServiceUtil.sendEmail()コールの後、私は実際に送信される機会を得る前に、添付されるファイルを直ちに削除していました!

ファイルオブジェクトを渡すことができるMailServiceUtilのラッパーの種類を調べて、実際に送信した後に削除を実行します。

0

あなたは、たInternetAddress []たInternetAddress [] CC、 たInternetAddress [] BCC、たInternetAddress [] bulkAddresses、 文字列の件名、文字列本体、からMailEngine.send方法に

送信( たInternetAddressを使用して試すことができますブールhtmlFormat、 たInternetAddress []のreplyTo、文字列のmessageId、文字列inReplyTo、 ファイル[]添付)

私はすでにそのはに送信発見したとして、あなたは問題を整理してもMailEngineUtil.sendEmailがうまくいくかどうかわからないですバスに乗り込んだ後、リスナーが叫ぶあなたがmailMessageにそれを追加しても添付ファイルを読み込まないdが呼び出される(私はそのMailMessageListenerと思う)。