使用Scala将文件转换为FileItem

时间:2017-04-04 10:01:05

标签: scala file junit scalatra fileitem

我有一个Web UI,它接受一个上传为 scalatra.servlet.FileItem 的文件,并传递给几个与上传文件有关的函数。这工作正常。现在,我需要对此功能进行junit测试。通过此junit测试,不再需要上载文件。我只需要从一个位置读取它。

val inFile = new File("resources/sample.xml")

我的问题是我需要将此传递给接受FileItem作为参数的函数。我收到类型不匹配错误。我如何将其更改为FileItem?我看过几篇文章,但都没有。我想知道是否甚至可以从File转换为FileItem。我也尝试过使用

val fileItem = new DiskFileItem("payloadFile", "plain/text", false, "Payload_FileItem", availableBytes, inFile).asInstanceOf[org.scalatra.servlet.FileItem]

但仍有错误:

java.lang.ClassCastException: org.apache.commons.fileupload.disk.DiskFileItem cannot be cast to org.scalatra.servlet.FileItem

我也尝试过使用inputStreams,但不知道接下来要做什么来从流转换为FileItem(或者甚至可能)。

val inputStream = getSystemClassLoader.getResourceAsStream("resources/sample.xml")

希望任何人都可以提供帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我认为这里有很多混乱;因为实际上有两个类 - apache,但是那个scala框架有自己的版本的东西。

请参阅here - FileUploadSupport.scala定义其拥有

case class FileItem(part: Part) {

所以看起来你实际上可以直接创建该类的实例 - 如果你设法计算 part 参数的含义。

我的想法得到答案 - 计算该Part参数的全名;然后看看你是否可以使用这些知识从那里直接实例化org.scalatra.servlet.FileItem的这样一个实例。