玩! FrameWork:我在将图像上传到我的服务器时遇到问题
Play! FrameWork: I'm having a problem uploading an image to my server
我希望有人能帮助我。我使用以下代码片段将图像上传到我的服务器(这是从此处复制的: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(PlayReload.scala:70)
at scala.collection.MapLike$MappedValues.get(MapLike.scala:261)
at play.runsupport.Reloader.$anonfun$findSource(Reloader.scala:552)
at scala.Option.flatMap(Option.scala:271)
at play.runsupport.Reloader.findSource(Reloader.scala:551)
at play.core.server.DevServerStart$$anon$$anon.sourceOf(DevServerStart.scala:174)
at play.core.SourceMapper.$anonfun$sourceFor(ApplicationProvider.scala:22)
at play.core.SourceMapper.$anonfun$sourceFor$adapted(ApplicationProvider.scala:22)
at scala.collection.IndexedSeqOptimized.$anonfun$find(IndexedSeqOptimized.scala:53)
at scala.collection.IndexedSeqOptimized.$anonfun$find$adapted(IndexedSeqOptimized.scala:53)
一些确凿的事实:
- 正面:Vue.js 2.6.12
- 后端:Play!Framework with Scala (2.12.8) 和 sbt 版本 4.0.0
- 这是我在 vue 中的输入框:
<input type="file" ref="file" @change="onSelect" />
我真的希望有人能帮助我:)。如果您需要更多信息来提供帮助,请问我:)
谢谢!
根据 this thread,Play 在某些 SBT 版本上可能会出现问题,反之亦然。
This workaround 可能适合你。
Play 2.8.8 也有此问题 patched,因此请尝试更新到最新版本。
我希望有人能帮助我。我使用以下代码片段将图像上传到我的服务器(这是从此处复制的: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(PlayReload.scala:70)
at scala.collection.MapLike$MappedValues.get(MapLike.scala:261)
at play.runsupport.Reloader.$anonfun$findSource(Reloader.scala:552)
at scala.Option.flatMap(Option.scala:271)
at play.runsupport.Reloader.findSource(Reloader.scala:551)
at play.core.server.DevServerStart$$anon$$anon.sourceOf(DevServerStart.scala:174)
at play.core.SourceMapper.$anonfun$sourceFor(ApplicationProvider.scala:22)
at play.core.SourceMapper.$anonfun$sourceFor$adapted(ApplicationProvider.scala:22)
at scala.collection.IndexedSeqOptimized.$anonfun$find(IndexedSeqOptimized.scala:53)
at scala.collection.IndexedSeqOptimized.$anonfun$find$adapted(IndexedSeqOptimized.scala:53)
一些确凿的事实:
- 正面:Vue.js 2.6.12
- 后端:Play!Framework with Scala (2.12.8) 和 sbt 版本 4.0.0
- 这是我在 vue 中的输入框:
<input type="file" ref="file" @change="onSelect" />
我真的希望有人能帮助我:)。如果您需要更多信息来提供帮助,请问我:)
谢谢!
根据 this thread,Play 在某些 SBT 版本上可能会出现问题,反之亦然。
This workaround 可能适合你。
Play 2.8.8 也有此问题 patched,因此请尝试更新到最新版本。