我希望编写一个在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图像。 你有什么想法吗? 谢谢, 斯坦
答案 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));