Corda:我无法使用Web UI的二进制流媒体将pdf(文件)附加到Corda节点

我们正尝试使用二进制流媒体将pdf作为附件上传到corda事务中。 实际上我们从这里得到了我们的启发( https://github.com/corda/corda/blob/release-M13.0/core/src/main/kotlin/net/corda/core/Utils.kt)check out fun sizedInputStreamAndHash()。 有什么其他的建议我们可以尝试吗?

以下是我们如何在API中编写二进制流的片段:

logger.debug(numOfClearBytes) val baos = ByteArrayOutputStream() ZipOutputStream(baos).use({ zos -> val arraySize = numOfClearBytes.toByteArray().size val bytes = numOfClearBytes.toByteArray() val n = (numOfClearBytes.toByteArray().size - 1) / arraySize + 1 // same as Math.ceil(numOfExpectedBytes/arraySize). zos.setLevel(Deflater.BEST_COMPRESSION) zos.putNextEntry(ZipEntry("z")) for (i in 0 until n) { zos.write(bytes, 0, arraySize) } zos.closeEntry() }) val bytes = baos.toByteArray() val inputAndHash: InputStreamAndHash = InputStreamAndHash(ByteArrayInputStream(bytes), bytes.sha256()) val attachmentId = services.uploadAttachment(inputAndHash.inputStream) val flowHandle = services.startTrackedFlow(::Payer, exchangeAmount, otherParty, attachmentId) val attachmentId = services.uploadAttachment(inputAndHash.inputStream) val flowHandle = services.startTrackedFlow(::Payer, exchangeAmount, otherParty, attachmentId) 

要通过HTTP将附件上传到节点,您必须点击/upload/attachment端点。 该端点由节点默认提供 – 您不必自己添加它。 请参阅https://github.com/corda/corda/blob/release-V1/webserver/src/main/kotlin/net/corda/webserver/servlets/DataUploadServlet.kt

如果您向该端点发送附件,则会将其附件上载到该节点,并且该端点将返回该节点上文件的散列。

然后,您可以使用CordaRPCOps.openAttachmentServiceHub.attachments.openAttachment使用其散列检索附件作为输入流。 然后,您可以按照您认为合适的方式处理它(无论是在Web端点还是在流程中)。

以下是使用HTTP端点上传附件的一个示例CorDapp: https : //github.com/joeldudleyr3/blacklist (自述文件中的详细信息)。