Scala Lift - сохраняет загруженные файлы в каталог сервера - PullRequest
2 голосов
/ 20 февраля 2012

В настоящее время я храню изображения в папке webapp моего проекта Lift, что, как я знаю, вызовет проблемы в будущем.

val path = "src/main/webapp/files/"

И код, который я использую для его сохранения:

case Full(file) => 

    val holder = new File(path, "test.txt")
    val output = new FileOutputStream(holder)               

    try { 

        output.write(file) 

    } finally { 

        output.close() 

    }

}

То, что я пытаюсь сделать, это сохранить в корневом каталоге сервера в легко управляемой папке, называемой файлами, так что SERVER_ROOT / files вне папки проекта.

Во-первых, как мне получить доступ кпуть к корню сервера, чтобы я мог сохранить их там?

Во-вторых, как бы я обслуживал эти файлы из своего приложения, чтобы я мог отображать их на странице?

Заранее спасибо,любая помощь высоко ценится:)

1 Ответ

2 голосов
/ 24 февраля 2012

Вы должны хранить файл в точном месте в файловой системе в соответствии с абсолютным путем. Я написал этот код, и он работает, так что, возможно, он поможет вам:

def storeFile (file : FileParamHolder): Box[File] = 
  {
    getBaseApplicationPath match
        {
            case Full(appBasePath) =>
            {
                var uploadDir = new File(appBasePath + "RELATIVE PATH TO YOUR UPLOAD DIR")
                val uploadingFile = new File(uploadDir, file.fileName)

                println("upload file to: " + uploadingFile.getAbsolutePath)

                var output = new FileOutputStream(uploadingFile)
                try
                { 
                    output.write(file.file)
                }
                catch 
                { 
                    case e => println(e) 
                }
                finally
                { 
                    output.close
                    output = null
                }

                Full(uploadingFile)
            }
            case _ => Empty
        }
  }

и это моя функция getBaseApplicationPath, которая определяет абсолютный путь к локальной машине (серверу или ПК вашего уровня):

def getBaseApplicationPath: Box[String] = 
    {
        LiftRules.context match
        {
            case context: HTTPServletContext => 
            {
                var baseApp: String = context.ctx.getRealPath("/")

                if(!baseApp.endsWith(File.separator))
                    baseApp = baseApp + File.separator

                Full(baseApp)
            }
            case _ => Empty
        }
    }
...