生成md5校验和scala js
Generate md5 checksum scala js
我正在尝试在 scala js 中增量计算十六进制 md5 校验和。文件传输后,将在服务器端验证校验和。
我尝试使用 spark-md5 scala js web jar 依赖项:
libraryDependencies ++= Seq("org.webjars.npm" % "spark-md5" % "2.0.2")
jsDependencies += "org.webjars.npm" % "spark-md5" % "2.0.2" / "spark-md5.js"
scala js代码:-
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 TypeError: Cannot read property 'buffer' of undefined
at Object.SparkMD5.ArrayBuffer.append (sampleapp-jsdeps.js:596)
at FileReader. (SampleApp.scala:458)
我试过 google 但大部分可用的帮助都是针对 javascript,找不到任何关于如何在 scala js 中使用这个库的信息。
抱歉,如果我错过了一些非常明显的东西,我是 javascript 和 scala js 的新手。
从 spark-md5 自述文件中,我读到:
var spark = new SparkMD5.ArrayBuffer();
spark.append(e.target.result);
var hexHash = spark.end();
您在 Scala.js 中的翻译方式如下(假设您想以动态类型的方式进行翻译):
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]
将其与您的代码片段集成会产生:
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 定义一个外观类型:
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
}
}
然后您可以更自然地使用它:
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())
}
免责声明:未经测试。它可能需要在这里和那里进行小的调整。
我正在尝试在 scala js 中增量计算十六进制 md5 校验和。文件传输后,将在服务器端验证校验和。
我尝试使用 spark-md5 scala js web jar 依赖项:
libraryDependencies ++= Seq("org.webjars.npm" % "spark-md5" % "2.0.2")
jsDependencies += "org.webjars.npm" % "spark-md5" % "2.0.2" / "spark-md5.js"
scala js代码:-
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 TypeError: Cannot read property 'buffer' of undefined at Object.SparkMD5.ArrayBuffer.append (sampleapp-jsdeps.js:596) at FileReader. (SampleApp.scala:458)
我试过 google 但大部分可用的帮助都是针对 javascript,找不到任何关于如何在 scala js 中使用这个库的信息。
抱歉,如果我错过了一些非常明显的东西,我是 javascript 和 scala js 的新手。
从 spark-md5 自述文件中,我读到:
var spark = new SparkMD5.ArrayBuffer();
spark.append(e.target.result);
var hexHash = spark.end();
您在 Scala.js 中的翻译方式如下(假设您想以动态类型的方式进行翻译):
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]
将其与您的代码片段集成会产生:
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 定义一个外观类型:
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
}
}
然后您可以更自然地使用它:
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())
}
免责声明:未经测试。它可能需要在这里和那里进行小的调整。