Получить файл о предоставлении хэша - PullRequest
0 голосов
/ 04 июля 2018

Я загрузил файл JAR и нашел его хэш. Теперь попытался скачать файл, указав его хеш. При запуске следующий код получил вывод: -

банка: (blacklist.txt, [B @ 35f9985c).

Что мы можем вывести из вывода. Как посмотреть скачанный файл?

 @PUT
    @Path("download_file")
    fun createIOU(
            @QueryParam("sechash") sechash: String
    ): Response {

        val SecuHash = SecureHash.parse(sechash)
        return try {
            val attachmentJr = downloadAttachment(rpcOps, SecuHash)
            println("jar      :"+attachmentJr)
            Response.status(CREATED).entity("Transaction id ${attachmentJr} committed to ledger.\n").build()
        } catch (ex: Throwable) {
            logger.error(ex.message, ex)
            Response.status(BAD_REQUEST).entity(ex.message!!).build()
        }
    }

    private fun downloadAttachment(proxy: CordaRPCOps, attachmentHash: SecureHash): Pair<String, ByteArray>? {
        //Get the attachmentJar from node for attachmentHash.
        val attachmentJar = proxy.openAttachment(attachmentHash)
        //Read the content of Jar to get file name and data.
        var file_name_data: Pair<String, ByteArray>? = null
        JarInputStream(attachmentJar).use { jar ->
            while (true) {
                val nje = jar.nextEntry ?: break
                if (nje.isDirectory) {
                    continue
                }
                file_name_data = Pair(nje.name, jar.readBytes())

            }
        }
       return file_name_data
    }

Получил вывод как: enter image description here

1 Ответ

0 голосов
/ 04 июля 2018

Вот простая конечная точка для загрузки вложения в качестве входного потока:

@GET
@Path("download-attachment")
fun downloadAttachment(@QueryParam("attachment_hash") attachmentHash: String): InputStream {
    val secureHash = SecureHash.parse(attachmentHash)
    return rpcOps.openAttachment(secureHash)
}

Затем вам нужно записать входной поток в виде файла JAR. Вот простая вспомогательная функция для этого:

fun downloadJar(url: String) {
    val inputStream = URL(url).openStream()

    BufferedReader(InputStreamReader(inputStream)).use {
        File("./downloaded_jar.jar").outputStream().use { outputStream ->
            inputStream.copyTo(outputStream)
        }
    }
}
...