将二进制文件附加到 cumulocity 中的事件
attaching binary file to an event in cumulocity
我有一个场景,我的代码也在 cumulocity 中创建了一个文件和一个事件。我需要将二进制文件附加到事件中,但是 API 中的 none 为我提供了功能,请问有关于如何继续的指导吗?
更新:
查看文档 https://cumulocity.com/api/10.11.0/#tag/Attachments 后,binaryElement 具有以下结构
我按以下方式修改了我的 JAVA 代码:
String pathEvent = platform.getUrl().get()+"/event/events/{{eventId}}/binaries";
String pathEventAttachment = pathEvent.replace("{{eventId}}", event.getId().getValue());
HttpHeaders headers = RequestAuthenticationEncoder.encode(getCredentials());
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("file",new ByteArrayResource(FileUtils.readFileToByteArray(file)));//anychanges here fails the code
map.add("filename", file.getName().getBytes());
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map,headers);
restTemplate.postForObject(pathEventAttachment, request, String.class);
log.info("Binary file added to the event {}", event.getId().getValue());
为事件创建了二进制文件,但文件名不正确:
请告诉我一些关于为什么名称没有更改的见解?
您需要在 /event/events/{{eventId}}/binaries 上创建一个 POST 并使用适当的 Content-Type 和正文。
这是 python 中的一个代码片段,其中一个二进制文件(日志文件)附加到一个事件。它只是 POSTs 文件内容(字节)为 application/octet-stream
# Create event
logfileEvent = {
'type': 'c8y_Logfile',
'text': 'See attached logfile',
'time': datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z',
'source': {
'id': DEVICE_ID
}
}
res = client.post(C8Y_BASE + '/event/events/', data=json.dumps(logfileEvent))
eventId = res.json()['id']
# Attach Binary
res = client.post(C8Y_BASE + '/event/events/' + eventId + '/binaries', data=bytes(FILE_CONTENT, 'utf-8'), headers={'Content-Type': 'application/octet-stream'})
binaryRef = res.json()['self']
# Update operation
logfileFragment = logfileOperation['c8y_LogfileRequest']
logfileFragment['file'] = binaryRef
updatedOperation = {
'status': 'SUCCESSFUL',
'c8y_LogfileRequest': logfileFragment
}
client.put(C8Y_BASE + '/devicecontrol/operations/' + logfileOperation['id'], data=json.dumps(updatedOperation))
我有一个场景,我的代码也在 cumulocity 中创建了一个文件和一个事件。我需要将二进制文件附加到事件中,但是 API 中的 none 为我提供了功能,请问有关于如何继续的指导吗?
更新:
查看文档 https://cumulocity.com/api/10.11.0/#tag/Attachments 后,binaryElement 具有以下结构
我按以下方式修改了我的 JAVA 代码:
String pathEvent = platform.getUrl().get()+"/event/events/{{eventId}}/binaries";
String pathEventAttachment = pathEvent.replace("{{eventId}}", event.getId().getValue());
HttpHeaders headers = RequestAuthenticationEncoder.encode(getCredentials());
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("file",new ByteArrayResource(FileUtils.readFileToByteArray(file)));//anychanges here fails the code
map.add("filename", file.getName().getBytes());
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map,headers);
restTemplate.postForObject(pathEventAttachment, request, String.class);
log.info("Binary file added to the event {}", event.getId().getValue());
为事件创建了二进制文件,但文件名不正确:
请告诉我一些关于为什么名称没有更改的见解?
您需要在 /event/events/{{eventId}}/binaries 上创建一个 POST 并使用适当的 Content-Type 和正文。
这是 python 中的一个代码片段,其中一个二进制文件(日志文件)附加到一个事件。它只是 POSTs 文件内容(字节)为 application/octet-stream
# Create event
logfileEvent = {
'type': 'c8y_Logfile',
'text': 'See attached logfile',
'time': datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z',
'source': {
'id': DEVICE_ID
}
}
res = client.post(C8Y_BASE + '/event/events/', data=json.dumps(logfileEvent))
eventId = res.json()['id']
# Attach Binary
res = client.post(C8Y_BASE + '/event/events/' + eventId + '/binaries', data=bytes(FILE_CONTENT, 'utf-8'), headers={'Content-Type': 'application/octet-stream'})
binaryRef = res.json()['self']
# Update operation
logfileFragment = logfileOperation['c8y_LogfileRequest']
logfileFragment['file'] = binaryRef
updatedOperation = {
'status': 'SUCCESSFUL',
'c8y_LogfileRequest': logfileFragment
}
client.put(C8Y_BASE + '/devicecontrol/operations/' + logfileOperation['id'], data=json.dumps(updatedOperation))