Я пытаюсь реализовать функцию загрузки файлов в своем приложении с использованием Akka HTTP. Я использую akka-stream
версию 2.4.4
.
Вот код (измененный akka-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
.
Может ли кто-нибудь сообщить мне, что я делаю неправильно здесь?