我们正在尝试使用二进制流将pdf作为附件上传到corda事务。事实上,我们从这里得到了灵感(https://github.com/corda/corda/blob/release-M13.0/core/src/main/kotlin/net/corda/core/Utils.kt),看看有趣的sizesInputStreamAndHash()。还有其他建议吗?
以下是我们如何在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)
答案 0 :(得分:0)
要使用内置网络服务器通过HTTP将附件上传到节点,您必须点击/upload/attachment
端点。默认情况下,此端点由节点提供 - 您不必自己添加它。请参阅https://github.com/corda/corda/blob/release-V1/webserver/src/main/kotlin/net/corda/webserver/servlets/DataUploadServlet.kt。
如果您向此端点发送附件,它将上传到该节点,端点将返回该节点上文件的散列。
然后,您可以使用CordaRPCOps.openAttachment
或ServiceHub.attachments.openAttachment
将附件作为输入流使用其哈希检索。然后,您可以根据需要处理它(在Web端点或流程中)。
要查看使用HTTP端点上传附件的示例CorDapp,请参阅此处的黑名单示例:https://github.com/corda/samples(自述文件中的详细信息)。