base64格式
base64图片或文件由以下格式组成:
第一部分: data:
第二部分: image/jpeg; (类型)
第三部分: base64,
第四部分:base64内容
说明
base64图片上传到OOS需要先将读到的base64文件转化成字节,然后在进行上传。base64文件上传之前需要进行处理,否则上传图片无法正常使用。具体代码如下:
代码
package com.test.oss;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import .IOUtils;
import .ClassPathResource;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
/**
* @Description: LocalTest
* @Author: mingtian
* @CreateDate: 2022/9/8 16:29
* @Version: 1.0
*/
public class LocalTest {
private static final String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
private static final String accessKeyId = "";
private static final String accessKeySecret = "";
private static final String bucketName = "test-head-portrait";
private static final String base64_pre = "data:image/png;base64,";
public static void main(String[] args) {
// base64文件
String base64ByCode = Objects.requireNonNull(getHeadPhotoBase64ByCode("1")).replace(base64_pre, "");
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "images/2.png";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 填写Byte数组。
byte[] content = new BASE64Decoder().decodeBuffer(base64ByCode);
// 创建PutObject请求。
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content));
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
/**
* 读取项目中配置的 base64图片,HP_1.txt
**/
private static String getHeadPhotoBase64ByCode(String headPhoto) {
String imageBaseStr;
try {
ClassPathResource resource = new ClassPathResource("headPhoto/HP_" + headPhoto + ".txt");
if (!resource.exists()) {
System.out.println("文件不存在");
return null;
}
imageBaseStr = IOUtils.toString(resource.getInputStream(), Objects.toString(StandardCharsets.UTF_8));
System.out.println("result:" + imageBaseStr);
return imageBaseStr;
} catch (IOException e) {
System.out.println("错误信息:" + e);
return null;
}
}
}
















