【问题标题】:Play! FrameWork: I'm having a problem uploading an image to my server玩! FrameWork:我在将图像上传到服务器时遇到问题
【发布时间】:2021-12-10 20:25:56
【问题描述】:

我希望有人可以帮助我。我使用以下代码 sn-p 将图像上传到我的服务器(这是从这里复制的:https://www.playframework.com/documentation/2.8.x/ScalaFileUpload

```def upload = Action(parse.multipartFormData) { request =>
    request.body
        .file("file")
        .map { picture =>
        
        val filename    = Paths.get(picture.filename).getFileName
        val fileSize    = picture.fileSize
        val contentType = picture.contentType

        // Test Print
        print("content Type: "+contentType)
        print("filename: "+filename)
        print("filesize: "+fileSize)

        picture.ref.copyTo(Paths.get(s"/tmp/picture/$filename"), replace = true)
        Ok("File uploaded")
        }
        .getOrElse {
        null //TODO: changeme
        }
    }```

我用我的打印方法检查了文件名、文件大小和内容类型,它似乎正在工作..

但我总是遇到以下异常:

java.lang.ClassCastException: xsbti.BasicVirtualFileRef cannot be cast to java.io.File
        at play.sbt.run.PlayReload$.$anonfun$sourceMap$1(PlayReload.scala:70)
        at scala.collection.MapLike$MappedValues.get(MapLike.scala:261)
        at play.runsupport.Reloader.$anonfun$findSource$1(Reloader.scala:552)
        at scala.Option.flatMap(Option.scala:271)
        at play.runsupport.Reloader.findSource(Reloader.scala:551)
        at play.core.server.DevServerStart$$anon$1$$anon$2.sourceOf(DevServerStart.scala:174)
        at play.core.SourceMapper.$anonfun$sourceFor$1(ApplicationProvider.scala:22)
        at play.core.SourceMapper.$anonfun$sourceFor$1$adapted(ApplicationProvider.scala:22)
        at scala.collection.IndexedSeqOptimized.$anonfun$find$1(IndexedSeqOptimized.scala:53)
        at scala.collection.IndexedSeqOptimized.$anonfun$find$1$adapted(IndexedSeqOptimized.scala:53)

一些确凿的事实:

  • 前端:Vue.js 2.6.12
  • 后端:Play!Framework 与 Scala (2.12.8) 和 sbt 版本 4.0.0
  • 这是我在 vue 中的输入框: <input type="file" ref="file" @change="onSelect" />

我真的希望有人可以帮助我:)。如果您需要更多信息来帮助,请问我:)

谢谢!

【问题讨论】:

    标签: scala file-upload vuejs2 playframework


    【解决方案1】:

    根据this thread,Play 可能在某些 SBT 版本上存在问题,反之亦然。

    This workaround 可能适合你。

    Play 2.8.8 也是 patched 的问题,因此请尝试更新到最新版本。

    【讨论】:

    • 谢谢。这解决了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2016-02-02
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多