java.io.File
- это не хранилище содержимого файла, а только адрес файла в хранилище - если API не позволяет передавать содержимое другим способом, вы должны использовать временные файлы, и никакой другой вариант.
В лучшем случае вы можете убедиться, что они удалены после использования:
- создайте их в
/tmp
с помощью File.createTempFile
- отметьте их как
deleteOnExit
если текущая процедура не работает и / или - вызов
delete
на file
в finally
блоке
Если вы используете Cats Effect, имеет смысл сделать что-то вроде:
val withTempFile = Resource.make[F, File] {
F.delay(File.createTempFile)
} { file =>
F.delay(file.delete)
}
withTempFile.use { file =>
// operation in F
}
Если вы используете обычный Scala, схема ссуды может работать:
def withTempFile(thunk: File => A): A = {
val tmpFile = File.createTempFile
try {
thunk(tmpFile)
} finally {
tmpFile.delete
}
}
withTempFile { file =>
// operation
}
Если у вас есть временный файл, который (почти) наверняка будет удален, вы можете написать к нему и передайте ссылку на файл вашей службе.
Если вы не хотите использовать файл tmp на диске, вы можете рассмотреть что-то вроде RAM-диска, если у вас есть возможность. Суть в том, что если API не позволяет вам использовать Array[Byte]
и принимает только File
, вы должны записать этот файл на диск. Или найдите другого поставщика услуг / API.