in app/models/FileEntryDAO.scala [180:226]
def writeStreamToFile(entry: FileEntry, inputStream: InputStream): Future[Unit] = {
logger.debug(s"writeStreamToFile called for entry: ${entry.id}")
storage(entry).flatMap {
case Some(storage) =>
storage.getStorageDriver match {
case Some(storageDriver) =>
val outputPath = Paths.get(entry.filepath)
logger.info(s"Preparing to write to $outputPath with storage driver $storageDriver")
Future {
try {
logger.debug("Initiating file write process using storageDriver...")
// Using storageDriver to write data from inputStream to the path
val result = storageDriver.writeDataToPath(outputPath.toString, entry.version, inputStream)
inputStream.close() // Close the stream after writing
logger.debug("File write process completed. Updating file content status...")
updateFileHasContent(entry)
logger.info(s"File successfully written to $outputPath and content status updated.")
result
} catch {
case e: Exception =>
logger.error(s"Error occurred during file writing to $outputPath", e)
try {
inputStream.close()
} catch {
case closeError: Exception =>
logger.error("Error occurred while closing input stream", closeError)
}
throw e
}
}
case None =>
val errorMsg = s"No storage driver available for storage ${entry.storageId}"
logger.error(errorMsg)
Future.failed(new RuntimeException(errorMsg))
}
case None =>
val errorMsg = s"No storage could be found for ID ${entry.storageId}"
logger.error(errorMsg)
Future.failed(new RuntimeException(errorMsg))
}
}