mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-10-31 10:36:05 +01:00 
			
		
		
		
	Move FileUploadUtil to FileUploadControllerBase.
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| package app | ||||
|  | ||||
| import _root_.util.Directory._ | ||||
| import _root_.util.{FileUploadUtil, FileUtil, Validations} | ||||
| import _root_.util.{FileUtil, Validations} | ||||
| import org.scalatra._ | ||||
| import org.scalatra.json._ | ||||
| import org.json4s._ | ||||
| @@ -10,7 +10,8 @@ import org.apache.commons.io.FileUtils | ||||
| import model.Account | ||||
| import scala.Some | ||||
| import service.AccountService | ||||
| import javax.servlet.http.HttpServletRequest | ||||
| import javax.servlet.http.{HttpSession, HttpServletRequest} | ||||
| import java.text.SimpleDateFormat | ||||
|  | ||||
| /** | ||||
|  * Provides generic features for controller implementations. | ||||
| @@ -116,7 +117,8 @@ case class Context(path: String, loginAccount: Option[Account], currentUrl: Stri | ||||
| /** | ||||
|  * Base trait for controllers which manages account information. | ||||
|  */ | ||||
| trait AccountManagementControllerBase extends ControllerBase { self: AccountService => | ||||
| trait AccountManagementControllerBase extends ControllerBase with FileUploadControllerBase { | ||||
|   self: AccountService  => | ||||
|  | ||||
|   protected def updateImage(userName: String, fileId: Option[String], clearImage: Boolean): Unit = { | ||||
|     if(clearImage){ | ||||
| @@ -126,9 +128,9 @@ trait AccountManagementControllerBase extends ControllerBase { self: AccountServ | ||||
|       } | ||||
|     } else { | ||||
|       fileId.map { fileId => | ||||
|         val filename = "avatar." + FileUtil.getExtension(FileUploadUtil.getUploadedFilename(fileId).get) | ||||
|         val filename = "avatar." + FileUtil.getExtension(getUploadedFilename(fileId).get) | ||||
|         FileUtils.moveFile( | ||||
|           FileUploadUtil.getTemporaryFile(fileId), | ||||
|           getTemporaryFile(fileId), | ||||
|           new java.io.File(getUserUploadDir(userName), filename) | ||||
|         ) | ||||
|         updateAvatarImage(userName, Some(filename)) | ||||
| @@ -149,3 +151,33 @@ trait AccountManagementControllerBase extends ControllerBase { self: AccountServ | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Base trait for controllers which needs file uploading feature. | ||||
|  */ | ||||
| trait FileUploadControllerBase { | ||||
|  | ||||
|   def generateFileId: String = | ||||
|     new SimpleDateFormat("yyyyMMddHHmmSSsss").format(new java.util.Date(System.currentTimeMillis)) | ||||
|  | ||||
|   def TemporaryDir(implicit session: HttpSession): java.io.File = | ||||
|     new java.io.File(GitBucketHome, s"tmp/_upload/${session.getId}") | ||||
|  | ||||
|   def getTemporaryFile(fileId: String)(implicit session: HttpSession): java.io.File = | ||||
|     new java.io.File(TemporaryDir, fileId) | ||||
|  | ||||
|   //  def removeTemporaryFile(fileId: String)(implicit session: HttpSession): Unit = | ||||
|   //    getTemporaryFile(fileId).delete() | ||||
|  | ||||
|   def removeTemporaryFiles()(implicit session: HttpSession): Unit = | ||||
|     FileUtils.deleteDirectory(TemporaryDir) | ||||
|  | ||||
|   def getUploadedFilename(fileId: String)(implicit session: HttpSession): Option[String] = { | ||||
|     val filename = Option(session.getAttribute("upload_" + fileId).asInstanceOf[String]) | ||||
|     if(filename.isDefined){ | ||||
|       session.removeAttribute("upload_" + fileId) | ||||
|     } | ||||
|     filename | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -1,6 +1,6 @@ | ||||
| package app | ||||
|  | ||||
| import util.{FileUtil, FileUploadUtil} | ||||
| import util.{FileUtil} | ||||
| import org.scalatra._ | ||||
| import org.scalatra.servlet.{MultipartConfig, FileUploadSupport} | ||||
| import org.apache.commons.io.FileUtils | ||||
| @@ -9,17 +9,18 @@ import org.apache.commons.io.FileUtils | ||||
|  * Provides Ajax based file upload functionality. | ||||
|  * | ||||
|  * This servlet saves uploaded file as temporary file and returns the unique id. | ||||
|  * You can get uploaded file using [[util.FileUploadUtil#getTemporaryFile()]] with this id. | ||||
|  * You can get uploaded file using [[app.FileUploadControllerBase#getTemporaryFile()]] with this id. | ||||
|  */ | ||||
| // TODO Remove temporary files at session timeout by session listener. | ||||
| class FileUploadController extends ScalatraServlet with FileUploadSupport with FlashMapSupport { | ||||
| class FileUploadController extends ScalatraServlet | ||||
|   with FileUploadSupport with FlashMapSupport with FileUploadControllerBase { | ||||
|  | ||||
|   configureMultipartHandling(MultipartConfig(maxFileSize = Some(3 * 1024 * 1024))) | ||||
|  | ||||
|   post("/image"){ | ||||
|     fileParams.get("file") match { | ||||
|       case Some(file) if(FileUtil.isImage(file.name)) => { | ||||
|         val fileId  = FileUploadUtil.generateFileId | ||||
|         FileUtils.writeByteArrayToFile(FileUploadUtil.getTemporaryFile(fileId), file.get) | ||||
|         val fileId  = generateFileId | ||||
|         FileUtils.writeByteArrayToFile(getTemporaryFile(fileId), file.get) | ||||
|         session += "upload_" + fileId -> file.name | ||||
|         Ok(fileId) | ||||
|       } | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| package app | ||||
|  | ||||
| import service._ | ||||
| import util.{FileUploadUtil, FileUtil, AdminAuthenticator} | ||||
| import util.{FileUtil, AdminAuthenticator} | ||||
| import util.StringUtil._ | ||||
| import jp.sf.amateras.scalatra.forms._ | ||||
| import org.apache.commons.io.FileUtils | ||||
|   | ||||
| @@ -1,17 +1,15 @@ | ||||
| package servlet | ||||
|  | ||||
| import util.FileUploadUtil | ||||
| import javax.servlet.http.{HttpSessionEvent, HttpSessionListener} | ||||
| import app.FileUploadControllerBase | ||||
|  | ||||
| /** | ||||
|  * Removes session associated temporary files when session is destroyed. | ||||
|  */ | ||||
| class SessionCleanupListener extends HttpSessionListener { | ||||
| class SessionCleanupListener extends HttpSessionListener with FileUploadControllerBase { | ||||
|  | ||||
|   def sessionCreated(se: HttpSessionEvent): Unit = {} | ||||
|  | ||||
|   def sessionDestroyed(se: HttpSessionEvent): Unit = { | ||||
|     FileUploadUtil.removeTemporaryFiles()(se.getSession) | ||||
|   } | ||||
|   def sessionDestroyed(se: HttpSessionEvent): Unit = removeTemporaryFiles()(se.getSession) | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,33 +0,0 @@ | ||||
| package util | ||||
|  | ||||
| import java.text.SimpleDateFormat | ||||
| import javax.servlet.http.HttpSession | ||||
| import util.Directory._ | ||||
| import org.apache.commons.io.FileUtils | ||||
|  | ||||
| object FileUploadUtil { | ||||
|  | ||||
|   def generateFileId: String = | ||||
|     new SimpleDateFormat("yyyyMMddHHmmSSsss").format(new java.util.Date(System.currentTimeMillis)) | ||||
|  | ||||
|   def TemporaryDir(implicit session: HttpSession): java.io.File = | ||||
|     new java.io.File(GitBucketHome, s"tmp/_upload/${session.getId}") | ||||
|  | ||||
|   def getTemporaryFile(fileId: String)(implicit session: HttpSession): java.io.File = | ||||
|     new java.io.File(TemporaryDir, fileId) | ||||
|  | ||||
| //  def removeTemporaryFile(fileId: String)(implicit session: HttpSession): Unit = | ||||
| //    getTemporaryFile(fileId).delete() | ||||
|  | ||||
|   def removeTemporaryFiles()(implicit session: HttpSession): Unit = | ||||
|     FileUtils.deleteDirectory(TemporaryDir) | ||||
|  | ||||
|   def getUploadedFilename(fileId: String)(implicit session: HttpSession): Option[String] = { | ||||
|     val filename = Option(session.getAttribute("upload_" + fileId).asInstanceOf[String]) | ||||
|     if(filename.isDefined){ | ||||
|       session.removeAttribute("upload_" + fileId) | ||||
|     } | ||||
|     filename | ||||
|   } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user