我正在尝试使用Akka HTTP在我的应用程序中实现文件上载功能。我在用 akka-stream
版 2.4.4
。
这是代码(修改自 阿卡-DOC)
path("fileupload") {
post {
extractRequestContext {
ctx => {
implicit val materializer = ctx.materializer
implicit val ec = ctx.executionContext
fileUpload("fileUpload") {
case (metadata, byteSource) =>
val location = FileUtil.getUploadPath(metadata)
val updatedFileName = metadata.fileName.replaceAll(" ", "").replaceAll("\"", "")
val uniqFileName = uniqueFileId.concat(updatedFileName)
val fullPath = location + File.separator + uniqFileName
val writer = new FileOutputStream(fullPath)
val bufferedWriter = new BufferedOutputStream(writer)
val result = byteSource.map(s => {
bufferedWriter.write(s.toArray)
}).runWith(Sink.ignore)
val result1 = byteSource.runWith(Sink.foreach(s=>bufferedWriter.write(s.toArray)))
Await.result(result1, 5.seconds)
bufferedWriter.flush()
bufferedWriter.close()
complete(uniqFileName)
/*onSuccess(result) { x =>
bufferedWriter.flush()
bufferedWriter.close()
complete("hello world")
}*/
}
}
}
}
}
此代码工作正常,并将文件上载到给定路径。我通过附加UUID来生成新的文件名,以确保文件名是唯一的。所以我需要将新文件名返回给调用者。但是,此方法始终不返回文件名。有时,它正在完成 Response has no content
。
任何人都可以让我知道我在做错了什么吗?