Сервлет на gae удаление изображения в формате JPEG - PullRequest
0 голосов
/ 28 апреля 2011

Я хочу написать сервлет для запуска в GAE. Этот сервлет хочет загрузить изображение и отправить его на адрес электронной почты. Это код:

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
            FileItemStream itemStream = iterator.next();
            is = itemStream.openStream();
            if (itemStream.isFormField()){
                         String fieldname = itemStream.getFieldName();
                         if (fieldname.equals("Destinatar")){
                                         destination = Streams.asString(is);
                     }; 
                     if (fieldname.equals("Mesaj"))   {
                                     message = Streams.asString(is);
                     };
                     if (fieldname.equals("Subject"))   {
                                        Subject = Streams.asString(is);
                         };
                     } else {
                        filename = FilenameUtils.getName(itemStream.getName());
                        contentFile = Streams.asString(is);
                     }
       }
..........
............
...........
MimeBodyPart attachment = new MimeBodyPart();
attachment.setFileName(filename);
ds = new ByteArrayDataSource(contentFile.getBytes() , "image/jpeg"); 
attachment.setDataHandler(new DataHandler(ds));
multipart.addBodyPart(attachment);
..............

Почтовый ящик назначения получает изображение в формате jpeg - имя файла и размерность правильная, как на клиенте, - но браузер не может понять содержимое, он не может распознать изображение в формате jpeg. У тебя есть идеи, в чем проблема? Спасибо, Аурел

1 Ответ

1 голос
/ 28 апреля 2011

Вы преобразовываете поток двоичных данных в строку в строке

contentFile = Streams.asString(is);

Не делайте этого.Это преобразование использует набор символов и декодирует байты в символы, но, безусловно, завершается ошибкой, поскольку поток не содержит допустимых символов этого набора символов.Если это двоичный файл, сохраните его как двоичный файл (в поток или байтовый массив):

InputStream fileContent;
// ...
    else {
        filename = FilenameUtils.getName(itemStream.getName());
        fileContent = is;
    }
// ...
ds = new ByteArrayDataSource(fileContent, "image/jpeg"); 
attachment.setDataHandler(new DataHandler(ds));
...