提供jpeg图像的gae上的Servlet

时间:2011-04-28 12:22:08

标签: google-app-engine file-upload jpeg

我希望编写一个在GAE中运行的servlet。此servlet想要上载图像并将其发送到电子邮件地址。这是代码:

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图像-filename和维度是正确的,就像在客户端上一样 - 但是浏览器无法理解内容,它不能识别像jpeg图像。 你有什么想法吗? 谢谢, 斯坦

1 个答案:

答案 0 :(得分:1)

您正在将二进制数据流转换为

行中的字符串
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));