首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成md5校验和scala

生成md5校验和scala
EN

Stack Overflow用户
提问于 2016-12-10 05:50:03
回答 1查看 699关注 0票数 0

我正在逐步计算scala中的十六进制md5校验和。一旦文件被传输,校验和将在服务器端被验证。

我尝试使用火花-MD5 scala的web依赖性:

libraryDependencies ++= Seq("org.webjars.npm“%”火花-MD5“% "2.0.2") jsDependencies += "org.webjars.npm“%”火花-MD5“% "2.0.2”/“火花-md5.js”

scala js代码:-

代码语言:javascript
运行
复制
val reader =  new FileReader
reader.readAsArrayBuffer(data)  // data is javascript blob object
val spark = scala.scalajs.js.Dynamic.global.SparkMD5.ArrayBuffer
reader.onload = (e: Event) => {
   spark.prototype.append(e.target)
   print("Checksum - > " + spark.end)
}

错误:-

Uncaught :无法读取Object.SparkMD5.ArrayBuffer.append (sampleapp-jsdeps.js:596)在FileReader上未定义的属性“buffer”。(SampleApp.scala:458)

我试过google,但是大部分的帮助都是针对javascript的,在scala中找不到关于如何使用这个库的任何信息。

如果我错过了一些非常明显的东西,很抱歉,我对javascript和scala都是新手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-10 11:01:27

从火花-MD5自述,我读到:

代码语言:javascript
运行
复制
var spark = new SparkMD5.ArrayBuffer();
spark.append(e.target.result);
var hexHash = spark.end();

在Scala.js中翻译它的方式如下(假设您想要以动态类型的方式完成它):

代码语言:javascript
运行
复制
import scala.scalajs.js
import scala.scalajs.js.typedarray._
import org.scalajs.dom.{FileReader, Event}

val SparkMD5 = js.Dynamic.global.SparkMD5
val spark = js.Dynamic.newInstance(SparkMD5.ArrayBuffer)()
val fileContent = e.target.asInstanceOf[FileReader].result.asInstanceOf[ArrayBuffer]
spark.append(fileContent)
val hexHashDyn = spark.end()
val hexHash = hexHashDyn.asInstanceOf[String]

将其与代码片段集成生成:

代码语言:javascript
运行
复制
val reader =  new FileReader
reader.readAsArrayBuffer(data)  // data is javascript blob object
val SparkMD5 = js.Dynamic.global.SparkMD5
val spark = js.Dynamic.newInstance(SparkMD5)()
reader.onload = (e: Event) => {
   val fileContent = e.target.asInstanceOf[FileReader].result.asInstanceOf[ArrayBuffer]
   spark.append(fileContent)
   print("Checksum - > " + spark.end().asInstanceOf[String])
}

如果这是您的代码库中SparkMD5的唯一用途,那么您可以停止使用。如果您计划多次使用它,您可能应该为要使用的API定义一个facade类型:

代码语言:javascript
运行
复制
import scala.scalajs.js.annotation._

@js.native
object SparkMD5 extends js.Object {
  @js.native
  class ArrayBuffer() extends js.Object {
    def append(chunk: js.typedarray.ArrayBuffer): Unit = js.native
    def end(raw: Boolean = false): String = js.native
  }
}

然后,您可以更自然地使用它:

代码语言:javascript
运行
复制
val reader =  new FileReader
reader.readAsArrayBuffer(data)  // data is javascript blob object
val spark = new SparkMD5.ArrayBuffer()
reader.onload = (e: Event) => {
   val fileContent = e.target.asInstanceOf[FileReader].result.asInstanceOf[ArrayBuffer]
   spark.append(fileContent)
   print("Checksum - > " + spark.end())
}

免责声明:未测试。这里和那里可能需要一些小的调整。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41072627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档