机场会自动上传以下两种情况产生的媒体文件:1. 在执行完航线任务后生成的媒体文件(照片/视频),2.无人机在空中通过控制负载拍摄的媒体文件(照片/视频)。媒体文件会在无人机降落到机场后,由无人机自动上传到机场,再由机场上传到云端。媒体文件上传是无人机和机场自动完成的,无需云端干预。如果机场媒体文件无法上传,开发者可以通过以下方案进行排查:
1、机场上传媒体文件的功能,只能上传到开发者指定的对象存储服务器中,需要开发者在后端application.yml文件中填写正确的对象存储配置信息,目前机场支持的对象存储类型有:minio、aliyun、aws。如果开发者没有正确填写配置文件信息,机场则无法上传媒体文件,需要开发者提供正确的对象存储配置信息。
默认配置信息如下,如果开发者没有修改这些信息,机场媒体文件无法上传。需要修改开发者配置正确的配置信息:
以下是使用minio配置的一个示例:
2、检查配置的桶名和对象名前缀文件夹在对象服务器上是否存在,可以登录对象存储的管理后台查看是否存在,如下图所示:
如果不存在,需要开发者在对象存储服务器上创建对应的桶名和对象名前缀文件夹,创建好后,再执行后续的排查。
3、检查临时凭证接口返回的数据是否符合上云API格式要求,如int类型不要写成string类型等,上云API请求临时凭证返回的示例消息如下:
{
"tid": "80472211-6fb3-49cc-86f5-78d6692b87da",
"bid": "cec87716-1a6b-43f3-b20b-6b030c41549f",
"data": {
"result": 0,
"output": {
"bucket": "cloud-bucket",
"credentials": {
"expire": 3300,
"access_key_id": "PW0IQM33QKXF21GI0M58",
"access_key_secret": "qZ1OZe9CFwrZi+7v+9WrT16WdKkjUDhHP53FP4bp",
"security_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJQVzBJUU0zM1FLWEYyMUdJME01OCIsImV4cCI6MTY5ODc2MjIyNywicGFyZW50IjoibWluaW9hZG1pbiJ9.eihIJ6T4Cz2tbSjHfYsca-3YxpjbSma_mR-iX_d6eVNhk3vSuiIdMzLRa9h5TRHGorzCUIDJPBYs8w6C5jwXOg"
},
"endpoint": "httpqZ1OZe9CFwrZi+7v+9WrT16WdKkjUDhHP53FP4bp",
"provider": "minio",
"region": "us-east-1",
"object_key_prefix": "wayline"
}
},
"timestamp": 1698758627775,
"method": "storage_config_get"
}
如果下发的消息格式不准确,需要开发者修改消息回复的示例,并将修改成功后的消息重新下发,并执行后续的排查。
4、使用如下所示示例代码上传媒体文件进行测试,注意:测试时需要保证与机场是同一网络环境,如把机场的网线/4G Dongle插入笔记本进行测试。
示例代码(目前只提供了minio的示例代码)如下:
public static final String ENDPOINT = "";
public static final String REGION = "";
public static final String BUCKET = "";
public static final String accessKey = "";
public static final String securityKey = "";
public static final String securityToken = "";
public static final String filePath = "";
public static final String objectKeyPrefix = "";
public static final String ossFileName = "";
public static final int expire = 3000;
public static void main(String[] args) throws Exception {
ResponseDate responseDate = new ResponseDate(ZonedDateTime.now().plus(Duration.ofSeconds(expire)));
Credentials credentials = new Credentials(accessKey, securityKey, securityToken, responseDate);
StaticProvider staticProvider = new StaticProvider(credentials.accessKey(), credentials.secretKey(), credentials.sessionToken());
MinioClient minioClient = MinioClient.builder().endpoint(ENDPOINT).credentialsProvider(staticProvider).build();
File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);
minioClient.putObject(PutObjectArgs.builder().bucket(BUCKET)
.object(objectKeyPrefix + "/" + ossFileName)
.region(REGION)
.stream(fileInputStream, fileInputStream.available(), -1)
.build());
}
上传成功后,控制台不会报错,且登录对象存储服务器后台查看到上传的文件,如下图所示:
如果使用示例代码上传失败报错,则需要开发者保证下发的临时凭证拥有媒体文件上传权限等。
5、如果使用以上示例代码,并保证笔记本与机场处于同一网络环境,如把机场的网线/4G Dongle插入笔记本进行测试,则使用以下步骤进行排查:
5.1、机场可能因为网络质量差等原因,导致媒体文件上传缓慢,等待一段时间后,再观察是否能上传。
5.2、检查下发的临时凭证过期时间是否不准确。
5.3、如果机场切换过三方云(包括以下场景:从一个三方云切换到另一个三方云、从司空2切换到三方云、从三方云切换到司空2),需要重启机场,重启机场会触发机场从云端获取临时凭证。重启机场之后再测试媒体文件能否上传。
5.5、如果一个航线任务的媒体文件没有执行完,下发了第二个航线任务,在无人机返航后,机场会上传第二个航线任务产生的媒体文件,降低第一个航线任务媒体文件上传的优先级。此时可以在第一个航线任务结束后,等待一段时间后,再下发第二个航线任务。
5.4、下发一个只包含一张照片的航线任务,测试航线文件只有一张照片时,照片能否正常上传。如果能够正常上传,那么与开发者的网络质量有关系,需要开发者解决网络质量差的问题。
5.5、机场会在thing/product/+/osd主题中,有remain_upload(待上传数量),请检查该字段是否有变化。
5.6、如果以上方案排查后,机场仍不能上传媒体文件,则拉取详细排查的截图,提单获取技术支持。
评论
0 条评论
请登录写评论。