本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文演示了如何使用阿里云 OpenAPI 上传及其查询符号表,提供了接口字段的解释说明、流程示例代码
准备阶段
SDK 接入
SDK 接入请参考 阿里云 OpenAPI 门户
创建 Client
public static Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Endpoint 请参考 https://api.aliyun.com/product/emas-appmonitor
config.endpoint = "emas-appmonitor.cn-shanghai.aliyuncs.com";
return new Client(config);
}
整体流程
流程图
完整示例代码
警告
切勿直接在生产环境中使用,请自行增加判空、数组越界及异常处理等逻辑。
重要
上传的符号表文件需要为 zip 格式,大小需限制在 1G 以内
说明
关于使用临时凭证上传OSS信息请参考:使用临时访问凭证上传文件到OSS
import com.aliyun.emas_appmonitor20190611.Client;
import com.aliyun.emas_appmonitor20190611.models.RequestUploadTokenRequest;
import com.aliyun.emas_appmonitor20190611.models.RequestUploadTokenResponseBody;
import com.aliyun.emas_appmonitor20190611.models.SubmitSymbolicRequest;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import java.io.File;
public class SymbolicUploadDemo {
public static void main(String[] args) throws Exception {
Long appKey = 1234L; // 替换为对应应用的 AppKey
String os = "iphoneos"; // 改为对应的 OS
String appVersion = "1.0.0"; // 非必选,根据符号化类型确认是否需要填写appVersion
// 0. 初始化 Client,参考 OpenAPI 门户: https://api.aliyun.com/api/emas-appmonitor/2019-06-11/RequestUploadToken?RegionId=cn-shanghai&tab=DEMO&lang=JAVA
Client client = createClient();
// 1. 获取上传凭证
RequestUploadTokenRequest requestUploadTokenRequest = new RequestUploadTokenRequest();
requestUploadTokenRequest.setAppKey(appKey);
requestUploadTokenRequest.setOs(os);
RequestUploadTokenResponseBody.RequestUploadTokenResponseBodyModel tokenInfo = client.requestUploadToken(requestUploadTokenRequest).getBody().getModel();
// 2. 准备上传
String fileName = "symbolic_files.zip"; // 待上传文件名称,这里以直接读取文件为例,如果需要使用其他数据流,请修改关联的OSS上传代码
String filePath = tokenInfo.uploadDir.replaceFirst("/", "") + System.currentTimeMillis() + "-" + "symbolic_files.zip"; // 随机文件名称,可以修改为自定义随机算法,前缀必须使用 tokenInfo.uploadDir
String fileType = "APP_DSYM"; // 符号化类型,请参考文档 https://api.aliyun.com/api/emas-appmonitor/2019-06-11/SubmitSymbolic 中的 FileType 字段解释
// 3. 上传符号文件到 OSS
uploadFile(tokenInfo, filePath, "/tmp/" + fileName); // localFilePath 替换为本地文件路径
// 4. 提交上传文件到符号化解析
SubmitSymbolicRequest submitSymbolicRequest = new SubmitSymbolicRequest();
submitSymbolicRequest.setAppKey(appKey);
submitSymbolicRequest.setOs(os);
submitSymbolicRequest.setFilePath(filePath);
submitSymbolicRequest.setFileName(fileName);
submitSymbolicRequest.setFileType(fileType);
submitSymbolicRequest.setAppVersion(appVersion); // 非必选,根据符号化类型确认是否需要填写appVersion
client.submitSymbolic(submitSymbolicRequest);
}
/**
* OSS 文件上传 示例代码
* <p>
* 使用 RequestUploadToken 的返回值,利用 STS Token上传文件到 OSS
* 该示例使用同步调用,如果需要异步调用,请保证上传成功后再调用 SubmitSymbolic
**/
public static void uploadFile(RequestUploadTokenResponseBody.RequestUploadTokenResponseBodyModel tokenInfo, String filePath, String localFilePath) {
// 创建OSS client
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(tokenInfo.accessKeyId, tokenInfo.accessKeySecret, tokenInfo.securityToken);
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create().
endpoint(tokenInfo.endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region("cn-shanghai")
.build();
try {
// 上传文件到OSS
File localFile = new File(localFilePath);
PutObjectRequest putObjectRequest = new PutObjectRequest(tokenInfo.uploadBucket, filePath, localFile);
ossClient.putObject(putObjectRequest);
} finally {
ossClient.shutdown();
}
}
public static Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Endpoint 请参考 https://api.aliyun.com/product/emas-appmonitor
config.endpoint = "emas-appmonitor.cn-shanghai.aliyuncs.com";
return new Client(config);
}
}
该文章对您有帮助吗?