场景
发送邮件的时候,希望在邮件中放一张图片。
如果可以直接引用链接就会很方便,但是想简单点,因为图片非常小。
java 实现
转换方法
/**
* 将文件转成 base64 字符串
*
* https://www.cnblogs.com/darkhumor/p/7525392.html
* https://blog.csdn.net/phoenix_cat/article/details/84676302
* https://blog.csdn.net/myloverisxin/article/details/117530365
* https://www.cnblogs.com/yejg1212/p/11926649.html
*
* 不同规范编码不同,会导致出现换行符号,但是解码的时候会被忽略。
* @param filePath 文件路径
* @return base64 字符串
* @since 0.1.146
*/
public static String fileToBase64(String filePath) {
File file = new File(filePath);
try(FileInputStream inputFile = new FileInputStream(file)) {
byte[] buffer = new byte[(int)file.length()];
inputFile.read(buffer);
String plainText = Base64.getEncoder().encodeToString(buffer);
return plainText.replaceAll("\r", "")
.replaceAll("\n", "");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
使用例子
HTML 中如何使用 base64
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Base64 Image Example</title>
</head>
<body>
<!-- 假设这是你图片的Base64编码 -->
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/..." alt="Base64 Image">
</body>
</html>
如何解决?
Java如何在发送邮件时添加图片
在Java中发送带有图片的邮件,你可以使用JavaMail API,这是Java的一个邮件处理库。
以下是添加图片到邮件的基本步骤:
-
添加依赖:首先,确保你的项目中包含了JavaMail库。如果你使用Maven,可以在
pom.xml
文件中添加以下依赖:<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency>
-
创建邮件会话:使用
javax.mail.Session
创建一个邮件会话。Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.example.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("yourEmail@example.com", "yourPassword"); } });
-
创建邮件消息:使用
session
创建一个MimeMessage
对象。MimeMessage message = new MimeMessage(session);
-
设置邮件属性:设置发件人、收件人、主题等。
message.setFrom(new InternetAddress("yourEmail@example.com")); message.addRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com")); message.setSubject("Test email with image");
-
添加图片:创建一个
MimeBodyPart
来包含图片,并将其添加到邮件中。MimeBodyPart textPart = new MimeBodyPart(); textPart.setText("This is a test email with an image."); MimeBodyPart imagePart = new MimeBodyPart(); DataSource fds = new FileDataSource("path/to/your/image.jpg"); imagePart.setDataHandler(new DataHandler(fds)); imagePart.setHeader("Content-ID", "<image1>"); imagePart.setDisposition(MimeBodyPart.INLINE); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(textPart); multipart.addBodyPart(imagePart); message.setContent(multipart);
-
发送邮件:使用
Transport
发送邮件。Transport transport = session.getTransport("smtp"); transport.connect("smtp.example.com", "yourEmail@example.com", "yourPassword"); transport.sendMessage(message, message.getAllRecipients()); transport.close();
请注意,你需要替换上述代码中的yourEmail@example.com
, yourPassword
, recipient@example.com
, smtp.example.com
, path/to/your/image.jpg
等为实际的值。
此外,确保你有权访问指定的图片文件,并且邮件服务器允许发送带有附件的邮件。
如何直接获取一张图片的base64?
要直接获取一张图片的Base64编码,你可以使用Java的java.util.Base64
类来实现。以下是一个简单的步骤和示例代码:
-
读取图片文件:使用
java.io.File
和java.io.FileInputStream
读取图片文件。 -
转换为字节数组:将图片文件转换为字节数组。
-
使用Base64编码:使用
java.util.Base64
类对字节数组进行编码。 -
获取Base64字符串:编码后的结果是一个字节数组,将其转换为字符串。
以下是具体的示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;
public class ImageToBase64 {
public static void main(String[] args) {
String imagePath = "path/to/your/image.jpg"; // 图片文件路径
File imageFile = new File(imagePath);
try (FileInputStream imageInFile = new FileInputStream(imageFile)) {
// 读取图片文件到字节数组
byte[] imageData = new byte[(int) imageFile.length()];
imageInFile.read(imageData);
// 使用Base64编码字节数组
String base64Image = Base64.getEncoder().encodeToString(imageData);
// 输出Base64编码后的字符串
System.out.println("Base64 Encoded Image: " + base64Image);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这段代码将读取指定路径的图片文件,将其转换为Base64编码的字符串,并打印出来。
请注意,你需要将path/to/your/image.jpg
替换为实际的图片文件路径。
此外,如果你需要将Base64编码的图片直接嵌入到HTML或CSS中,你可能需要确保Base64字符串是有效的,并且可能需要添加适当的前缀(如data:image/jpeg;base64,
)来指示这是一个图片数据。
如何在 html 中用 base64 方式显示图片?
在HTML中使用Base64编码显示图片,你可以将图片的Base64编码直接嵌入到<img>
标签的src
属性中。这样做的好处是不需要从服务器请求图片文件,图片会直接嵌入到HTML文档中。下面是具体的做法:
-
获取图片的Base64编码:首先,你需要将图片文件转换成Base64编码,如之前所述。
-
创建HTML标签:使用
<img>
标签,并设置src
属性为图片的Base64编码字符串。确保Base64字符串前有正确的前缀,例如data:image/jpeg;base64,
,其中image/jpeg
是图片的MIME类型,根据你的图片类型(如PNG、GIF等)进行相应的更改。
下面是一个示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Base64 Image Example</title>
</head>
<body>
<!-- 假设这是你图片的Base64编码 -->
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/..." alt="Base64 Image">
</body>
</html>
请注意,Base64编码的字符串通常会很长,因此你需要确保正确地获取和嵌入整个字符串。
另外,由于Base64编码增加了大约33%的大小,对于较大的图片,这可能会导致HTML文件的大小显著增加,从而影响页面加载速度。
因此,使用Base64编码的图片适用于小图标或小图片,对于较大的图片,最好是使用常规的图片文件路径。
参考资料
https://blog.csdn.net/u011456337/article/details/86180383
github项目地址:https://github.com/lufei222/san-holiday.git