바이너리 스트리밍을 사용하여 corda 트랜잭션에 대한 첨부 파일로 pdf를 업로드하려고합니다. 사실 우리는 여기서 영감을 얻었습니다 (https://github.com/corda/corda/blob/release-M13.0/core/src/main/kotlin/net/corda/core/Utils.kt) 재미있는 sizeInputStreamAndHash()를 확인하십시오. 우리가 시도 할 수있는 다른 제안이 있습니까?Corda : 웹 UI에서 이진 스트리밍을 사용하여 Corda 노드에 pdf (파일)를 첨부 할 수 없습니다.
다음은 우리가 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)
그리고 무엇이 잘못 되었습니까? 오류 메시지가 있었습니까? – joel
Howdy Joel! 그다지 Corda의 문제에 관한 것이 아니라, 나는 웹 API를 작동시키기 위해 사용할 라이브러리를 추측한다. 우리 프로젝트에 'org.glassfish.jersey.media 가져 오기'를 사용했고 코드가 웹 서버를 시작할 때 MultiPartFeature.class를 등록하지 않아 오류가 발생했습니다. 그것없이 MediaType.MULTIPART_FORM_DATA의 API에서 @FormDataParam을 사용할 수 없습니다 –