当前位置: 首页 > 知识库问答 >
问题:

Corda中的附件:

杨飞
2023-03-14

我尝试使用uploadAttachemnt方法上传zip文件,得到了一个secureHash作为输出。我试图下载相同的附件,使用hash作为openAttachmnet方法的输入,得到了一个InputStream。当我试图使用BuffeReader读取inputStream的内容时,它被加密了。我意识到我必须解压缩文件并读取它,所以我得到了这个包“import java.util.zip.ZipEntry”来读取zip文件内容,我不确定我是否可以使用InputStream读取zip文件内容。我应该如何使用InputStream读取zip文件内容?如果不是,我应该解压并上传文件吗?

fun main(args: Array<String>) :String {
    require(args.isNotEmpty()) { "Usage: uploadBlacklist <node address>" }
    args.forEach { arg ->
        val nodeAddress = parse(args[0])
        val rpcConnection = CordaRPCClient(nodeAddress).start("user1", "test")
        val proxy = rpcConnection.proxy

         val attachmentInputStream = File(args[1]).inputStream()
        val attachmentHash = proxy.uploadAttachment(attachmentInputStream)
        print("AtachmentHash"+attachmentHash)


        // Download the attachment
        val inputString = proxy.openAttachment(attachmentHash).bufferedReader().use { it.readText() }
        println("The contents are ")
        print(inputString)

        val file = File("OutputFile.txt")
        file.writeText(inputString)
        rpcConnection.notifyServerAndClose()

    }

    return("File downloaded successfully in the path")
}

共有2个答案

谭修竹
2023-03-14

我在zip文件中有很多文件。所以我尝试了这个代码,它运行良好。谢谢你的输入,乔尔。

// downloading the attachment
        val attachmentDownloadInputStream = proxy.openAttachment(attachmentHash)
        val attachmentJar = JarInputStream(attachmentDownloadInputStream)
        var contents =""

        //Reading the contents
        while(attachmentJar.nextJarEntry!=null){
            contents = contents + attachmentJar.bufferedReader().readLine()

        }
        println("The contents are $contents")
宋奇希
2023-03-14

您需要将< code>openAttachment返回的< code>InputStream转换为< code>JarInputStream。然后,您可以使用< code>JarInputStream的方法来定位一个条目并读取其内容:

val attachmentDownloadInputStream = proxy.openAttachment(attachmentHash)
val attachmentJar = JarInputStream(attachmentDownloadInputStream)

while (attachmentJar.nextEntry.name != expectedFileName) {
    attachmentJar.nextEntry
}

val contents = attachmentJar.bufferedReader().readLines()

例如,请在此处查看黑名单示例 CorDapp 的 RPC 客户端代码:https://github.com/corda/samples。

 类似资料:
  • 无论我找到什么链接,他们都在谈论更改web.xml或添加AppCong,我不确定在Corda示例项目中如何做到这一点。 小队请帮忙。

  • 这是我能够产生问题的代码。

  • “使用附件”页面声明: 附件是通过哈希从事务中引用的zip/jar文件,但不包含在事务本身中。 但是,API:Contract Constraints页面声明: 但是,在签出HashAttachment代码时,我没有看到它包含了契约Jar文件的内部内容。 我的假设是,我们不是在与交易一起转让合同罐子。所发生的情况可以描述如下: 在节点启动期间,Corda扫描所有CorDapps,并将包含契约类的J

  • 帐户sdk的依赖关系没有完全下载。corda-lib-dev中的错误。 https://ci-artifactory.corda.r3cev.com/artifactory/corda-lib-dev/com/r3/corda/lib/accounts/accounts-workflows/1.0-RC04/accounts-workflows-1.0-RC04.pom我还检查了上面的链接。显示4

  • Corda 是一个分布式账本平台,用于记录,管理和自动化业务合作伙伴之间的法律协议。由世界上最大的金融机构设计,并且在多个行业都有应用。它针对分散式应用程序面临的隐私和可扩展性挑战提供了独特的响应。 特点: 用Java和其他JVM语言编写的智能合约 流程框架来管理参与者之间的沟通和协商 点对点网络节点 “公证”基础设施来验证交易的唯一性和排序 启用称为CorDapps的分布式应用程序的开发和部署 用Kotlin编写,基于JVM

  • 如果我说一个事务B只有在它对以前的事务a有一些引用时才是有效的,那么我可以在事务B的附件中包含事务a的状态属性/合同代码吗?如何引用此附件,从何处检索?交易B的参与节点是否可以查看交易A的内容进行验证?