corda - 在corda中上传附件
问题描述
我试图在corda中上传附件。我已经检查了https://github.com/corda/corda/tree/release-M14。它非常复杂,没有用户界面。当我尝试使用代码的某些部分时,它显示了完整的错误。我试过 https://github.com/corda/blacklist。但是这里的哈希是在 HTML 页面中找到的。我可以获得一个简单的示例来使用 UI 和在 kt 文件中查找哈希来上传文档吗?
解决方案
这里的黑名单示例还有一个在 Kotlin 中通过 RPC 上传附件的示例:
package net.corda.examples.attachments.client
import net.corda.client.rpc.CordaRPCClient
import net.corda.core.crypto.SecureHash
import net.corda.core.messaging.CordaRPCOps
import net.corda.core.utilities.NetworkHostAndPort.Companion.parse
import net.corda.core.utilities.loggerFor
import net.corda.examples.attachments.ATTACHMENT_EXPECTED_CONTENTS
import net.corda.examples.attachments.ATTACHMENT_FILE_NAME
import net.corda.examples.attachments.BLACKLIST_JAR_PATH
import org.slf4j.Logger
import java.io.File
import java.util.jar.JarInputStream
/**
* Uploads the jar of blacklisted counterparties with whom agreements cannot be struck to the node.
*/
fun main(args: Array<String>) {
UploadBlacklistClient().main(args)
}
private class UploadBlacklistClient {
companion object {
val logger: Logger = loggerFor<UploadBlacklistClient>()
}
fun main(args: Array<String>) {
require(args.isNotEmpty()) { "Usage: uploadBlacklist <node address>" }
args.forEach { arg ->
val nodeAddress = parse(arg)
val rpcConnection = CordaRPCClient(nodeAddress).start("user1", "test")
val proxy = rpcConnection.proxy
val attachmentHash = uploadAttachment(proxy, BLACKLIST_JAR_PATH)
logger.info("Blacklist uploaded to node at $nodeAddress")
val attachmentJar = downloadAttachment(proxy, attachmentHash)
logger.info("Blacklist downloaded from node at $nodeAddress")
checkAttachment(attachmentJar, ATTACHMENT_FILE_NAME, ATTACHMENT_EXPECTED_CONTENTS)
logger.info("Attachment contents checked on node at $nodeAddress")
rpcConnection.notifyServerAndClose()
}
}
}
/**
* Uploads the attachment at [attachmentPath] to the node.
*/
private fun uploadAttachment(proxy: CordaRPCOps, attachmentPath: String): SecureHash {
val attachmentUploadInputStream = File(attachmentPath).inputStream()
return proxy.uploadAttachment(attachmentUploadInputStream)
}
/**
* Downloads the attachment with hash [attachmentHash] from the node.
*/
private fun downloadAttachment(proxy: CordaRPCOps, attachmentHash: SecureHash): JarInputStream {
val attachmentDownloadInputStream = proxy.openAttachment(attachmentHash)
return JarInputStream(attachmentDownloadInputStream)
}
/**
* Checks the [expectedFileName] and [expectedContents] of the downloaded [attachmentJar].
*/
private fun checkAttachment(attachmentJar: JarInputStream, expectedFileName: String, expectedContents: List<String>) {
var name = attachmentJar.nextEntry.name
while (name != expectedFileName) {
name = attachmentJar.nextEntry.name
}
val contents = attachmentJar.bufferedReader().readLines()
if (contents != expectedContents) {
throw IllegalArgumentException("Downloaded JAR did not have the expected contents.")
}
}
推荐阅读
- ios - 可以保护 Mobile Safari 缓存免受物理访问吗?
- javascript - 返回包含该特定元素的完整数组
- google-chrome-extension - 浏览器清除数据后未清除 Microsoft Graph 登录数据
- docker - windows server 2019上rabbitmq的docker镜像
- c++ - 我的第一个柯南包没有被 CMAKE 找到?
- apache-kafka - 当 avro 模式由另一个模式作为可选字段组成时,反序列化问题
- hyperlink - Flutter web:使用 url_launcher 在 target="_self" 中启动页面
- tabulator - 选项列表选项显示 [object Object]
- python - CodeHS 使我的程序失败,即使它完全有效
- xml - 如何阅读特定的 XML 文件部分 - VB.Net