Беда с загрузкой общего файла и Liferay - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь настроить портлет Liferay Web Form для приема загрузки файлов, и у меня почти все работает, кроме прикрепления файла к электронному письму для отправки.

Получение полей из формы:

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)

Правильно ли настроен мой DiskFileItemFactory?Что я могу делать не так?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Можете ли вы попробовать использовать метод MailEngine.send

отправка ( InternetAddress from, InternetAddress [] to, InternetAddress [] cc, InternetAddress [] скрытая копия, InternetAddress [] bulkAddresses, Тема строки, тело строки, логическое значение htmlFormat, InternetAddress [] replyTo, String messageId, String inReplyTo, Файл [] вложения)

Я не уверен, что MailEngineUtil.sendEmail будет работать, даже если вы решите проблему, так как вы уже обнаружили ее отправку на шину, а затем будет вызван слушатель (я думаю, его MailMessageListener), который не читает вложение, даже если Вы добавляете его в mailMessage.

0 голосов
/ 29 марта 2012

Похоже, что подсистема MailServiceUtil раскручивает поток, чтобы выполнить фактическую отправку электронной почты, и не ожидает его возврата (следовательно, потока).Поэтому после вызова MailServiceUtil.sendEmail () я сразу же удалял файл, который нужно прикрепить, ДО того, как он действительно получил возможность быть отправленным!Я могу передать объект файла в файл, а затем после его отправки выполнить удаление.

...