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

关于附件上传和下载的问题

麹承
2023-03-14

首先,我读了corda关于使用附件的文档。然而,我仍然有问题的过程上传和下载附件。

我的任务是编写一个简单的cordapp,用于将文件从NodeA传输到NodeB。从NodeA shell上传一个zip文件后,我收到一个散列,然后将其包含在事务中。流动成功。然而,在NodeB中,我无法取回该文件。然后我尝试使用该散列从NodeA获取文件。但是,shell返回错误消息并表示InvalidInputSteam。

下面是流程部分:

@InitiatingFlow
@StartableByRPC
class FileInitiateFlow(
    val receiver: Party,
    val comment: String,
    val hash: SecureHash.SHA256) : FlowLogic<SignedTransaction>() {
    companion object {
    object GENERATING_TRANSACTION : Step("Generating transaction")
    object VERIFYING_TRANSACTION : Step("Verifying contract constraints.")
    object SIGNING_TRANSACTION : Step("Signing transaction with sender private key.")
    object GATHERING_SIGS : Step("Gathering the receiver's signature."){
        override fun childProgressTracker() = CollectSignaturesFlow.tracker()
    }

    object FINALISING_TRANSACTION : Step("Obtaining notary signature and recording transaction.") {
        override fun childProgressTracker() = FinalityFlow.tracker()
    }

    fun tracker() = ProgressTracker(
            GENERATING_TRANSACTION,
            VERIFYING_TRANSACTION,
            SIGNING_TRANSACTION,
            GATHERING_SIGS,
            FINALISING_TRANSACTION
    )
}

override val progressTracker = tracker()


@Suspendable
override fun call(): SignedTransaction {
    // Obtain a reference to the notary we want to use.
    val notary = serviceHub.networkMapCache.notaryIdentities[0]
    val sender = serviceHub.myInfo.legalIdentities.first()
    // Stage 1.
    progressTracker.currentStep = GENERATING_TRANSACTION
    // Generate an unsigned transaction.
    val fileState = FileState(sender, receiver,comment)
    val txCommand = Command(RoamingContract.Commands.FileInitiate(), fileState.participants.map { it.owningKey })
    val txBuilder = TransactionBuilder(notary)
            .addOutputState(fileState, ID)
            .addCommand(txCommand)
            .addAttachment(hash)

    // Stage 2.
    progressTracker.currentStep = VERIFYING_TRANSACTION
    // Verify that the transaction is valid.
    txBuilder.verify(serviceHub)

    // Stage 3.
    progressTracker.currentStep = SIGNING_TRANSACTION
    // Sign the transaction.
    val partSignedTx = serviceHub.signInitialTransaction(txBuilder)

    // Stage 4.
    progressTracker.currentStep = GATHERING_SIGS
    // Send the state to the counterparty, and receive it back with their signature.
    val otherPartyFlow = initiateFlow(receiver)
    val fullySignedTx = subFlow(CollectSignaturesFlow(partSignedTx, setOf(otherPartyFlow), GATHERING_SIGS.childProgressTracker()))

    // Stage 5.
    progressTracker.currentStep = FINALISING_TRANSACTION
    // Notarise and record the transaction in both parties' vaults.
    return subFlow(FinalityFlow(fullySignedTx, FINALISING_TRANSACTION.childProgressTracker()))
}
}

@InitiatedBy(FileInitiateFlow::class)
class FileInitiateRespond(val senderFlow: FlowSession) :         FlowLogic<SignedTransaction>() {
@Suspendable
override fun call(): SignedTransaction{
    val signedTransactionFlow = object : SignTransactionFlow(senderFlow) {
        override fun checkTransaction(stx: SignedTransaction) = requireThat {
            val output = stx.tx.outputs.single().data
            "This must be an File State" using (output is FileState)
        }
    }
    return subFlow(signedTransactionFlow)
}
}

因此,我首先运行uploadAttachment上载zip文件,获得哈希值,然后启动流,以哈希值作为输入。流是成功的,但在接收者的一方,我无法获得哈希键为上传的文件从检查现有的状态。

共有1个答案

凤凡
2023-03-14

修复程序在这里:https://github.com/Corda/Corda/pull/3248,并将在Corda4中提供。

 类似资料:
  • 我让activestorage在LocalHost上使用我的Rails5.2应用程序。 null 服务器设置如下: Nginx在计算机调用上反转代理 运行的另一台计算机上的Apache 乘客 我可以在rails编写的日志文件中看到,第二个请求的响应实际上相当快:

  • 我试图用PythonAnywhere和Flask编写一个非常简单的webapp,它允许用户上传文本文件,生成csv文件,然后让用户下载csv文件。不一定要花哨,只要管用就行了。我已经编写了从驱动器上的txt文件生成csv的程序。 现在,我的函数用以下命令打开驱动器上的文件:

  • 我需要创建一个从APIendpoint下载文件并将其上传到另一个APIendpoint的进程。该文件的最大大小为100MB,但我们将有许多进程并行运行。我试图用Spring WebClient实现它,而不需要将文件存储在内存中。当前代码将文件存储在内存中,因为使用大文件的测试会抛出OutofMemoryError。

  • 问题内容: 设置INTERNET_ACCESS等后,出现此错误。 这是我测试过的代码的另一部分,仍然收到该异常 } 问题答案: “ftp.194.90.81.149”: No address associated with hostname 您收到UnknownHostException的事实意味着ftp.194.90.81.149在DNS中不是真实的主机名。我怀疑其中的数字部分是您真正想要的。即

  • 本文向大家介绍详解SpringBoot文件上传下载和多文件上传(图文),包括了详解SpringBoot文件上传下载和多文件上传(图文)的使用技巧和注意事项,需要的朋友参考一下 最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的Java代码: 1、开发环境: IDEA15+ Maven+JDK1.8 2、新建一个maven工程:   3、工程框架   4、pom.xml文件依赖项

  • 本文向大家介绍请问如何在基于Java的Web项目中实现文件上传和下载?相关面试题,主要包含被问及请问如何在基于Java的Web项目中实现文件上传和下载?时的应答技巧和注意事项,需要的朋友参考一下 考察点:文件传输   在Sevlet 3 以前,Servlet API中没有支持上传功能的API,因此要实现上传功能需要引入第三方工具从POST请求中获得上传的附件或者通过自行处理输入流来获得上传的文件,