由于和外部对接的时候需求要把一个文件的url输出为base64码,我这里参考了博客:
JAVA–根据Url下载文件数据(输出Base64)
但由于我用的是JDK11的,已经没有rt.jar的包了,而该博客里使用的是jdk8的BASE64Encoder,所以这个时候可以把BASE64Encoder换成org.apache.commons.codec.binary.Base64,我这里完整的代码如下:
/*** 把url格式的文件转为base64码* @author FanHuiFang* @version 1.0* @date 2024年04月18日 10:26*/import com.google.common.base.Strings;
import org.apache.commons.codec.binary.Base64;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class Base64Utils {/*** 根据文件url获取文件并转换为base64编码** @param url 文件地址* @return 文件base64编码*/public static String netSourceToBase64(String url){try{URL uploadUrl = new URL(url);HttpURLConnection conn = (HttpURLConnection) uploadUrl.openConnection();conn.setConnectTimeout(10 * 1000);byte[] bytes = toByteArray(conn.getInputStream());//对字节数组Base64编码return Base64.encodeBase64String(bytes);} catch (Exception ex){System.out.println("文件下载出错:"+ex.getMessage()+"\n");return "";}}/*** inputStream转化为byte[]数组* @param input InputStream 输入流* @return byte[] 文件二进制字节数组* @throws IOException*/public static byte[] toByteArray(InputStream input) throws IOException {ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buffer = new byte[4096];int len;while (-1 != (len = input.read(buffer))) {output.write(buffer, 0, len);}return output.toByteArray();}/*** 把base64转化文件流** @param base64 base64* @return byte[] 文件流*/public static byte[] decryptByBase64(String base64) {if (Strings.isNullOrEmpty(base64)) {return null;}return Base64.decodeBase64(base64.substring(base64.indexOf(",") + 1));}
}
---------------------知道的越多,不知道的越多----------------------