【问题标题】:Attachment in Corda :Corda 中的附件:
【发布时间】:2018-11-19 23:50:36
【问题描述】:

我尝试使用 uploadAttachemnt 方法上传 zip 文件,其中我得到了一个 secureHash 作为输出。 我尝试使用哈希作为 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")
}

【问题讨论】:

    标签: blockchain corda


    【解决方案1】:

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

    val attachmentDownloadInputStream = proxy.openAttachment(attachmentHash)
    val attachmentJar = JarInputStream(attachmentDownloadInputStream)
    
    while (attachmentJar.nextEntry.name != expectedFileName) {
        attachmentJar.nextEntry
    }
    
    val contents = attachmentJar.bufferedReader().readLines()
    

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

    【讨论】:

    • 谢谢乔尔。 JarInputStream 不只接受 jar 文件内容吗?但是我尝试了上面的代码,但内容仍然是空的`启动耗时 2424 毫秒请帮忙
    • 您是否找到了您正在寻找的 JAR 条目?在尝试阅读之前,您需要移动到正确的条目。
    • 是的。我错过了那部分。因为我首先在一个 zip 中有很多文件,所以我必须遍历这些文件,然后它就可以正常工作了。非常感谢乔尔。 :)
    【解决方案2】:

    我在 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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多