diff --git a/src/main/scala/app/FileUploadController.scala b/src/main/scala/app/FileUploadController.scala index ad8ea28..9798c0a 100644 --- a/src/main/scala/app/FileUploadController.scala +++ b/src/main/scala/app/FileUploadController.scala @@ -25,7 +25,9 @@ post("/image/:owner/:repository"){ execute { (file, fileId) => - FileUtils.writeByteArrayToFile(new java.io.File(getAttachedDir(params("owner"), params("repository")), fileId), file.get) + FileUtils.writeByteArrayToFile(new java.io.File( + getAttachedDir(params("owner"), params("repository")), + fileId + "." + FileUtil.getExtension(file.getName)), file.get) } } diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 2e60168..661c1e0 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -274,12 +274,14 @@ }) get("/:owner/:repository/_attached/:file")(referrersOnly { repository => - defining(new java.io.File(Directory.getAttachedDir(repository.owner, repository.name), params("file"))){ file => - if(file.exists) { - contentType = FileUtil.getMimeType(file) - file - } else NotFound - } + (Directory.getAttachedDir(repository.owner, repository.name) match { + case dir if(dir.exists && dir.isDirectory) => + dir.listFiles.find(_.getName.startsWith(params("file") + ".")).map { file => + contentType = FileUtil.getMimeType(file.getName) + file + } + case _ => None + }) getOrElse NotFound }) val assignedUserName = (key: String) => params.get(key) filter (_.trim != "") diff --git a/src/main/scala/servlet/AutoUpdateListener.scala b/src/main/scala/servlet/AutoUpdateListener.scala index 9ffed83..05dc0ee 100644 --- a/src/main/scala/servlet/AutoUpdateListener.scala +++ b/src/main/scala/servlet/AutoUpdateListener.scala @@ -9,6 +9,7 @@ import util.Directory._ import util.ControlUtil._ import org.eclipse.jgit.api.Git +import util.Directory object AutoUpdate { @@ -50,6 +51,32 @@ * The history of versions. A head of this sequence is the current BitBucket version. */ val versions = Seq( + new Version(1, 14){ + override def update(conn: Connection): Unit = { + import eu.medsea.mimeutil.{MimeUtil2, MimeType} + + val mimeUtil = new MimeUtil2() + mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector") + + super.update(conn) + using(conn.createStatement.executeQuery("SELECT USER_NAME, REPOSITORY_NAME FROM REPOSITORY")){ rs => + while(rs.next){ + defining(Directory.getAttachedDir(rs.getString("USER_NAME"), rs.getString("REPOSITORY_NAME"))){ dir => + if(dir.exists && dir.isDirectory){ + dir.listFiles.foreach { file => + if(file.getName.indexOf('.') < 0){ + val mimeType = MimeUtil2.getMostSpecificMimeType(mimeUtil.getMimeTypes(file, new MimeType("application/octet-stream"))).toString + if(mimeType.startsWith("image/")){ + file.renameTo(new File(file.getParent, file.getName + "." + mimeType.split("/")(1))) + } + } + } + } + } + } + } + } + }, Version(1, 13), Version(1, 12), Version(1, 11), diff --git a/src/main/scala/util/FileUtil.scala b/src/main/scala/util/FileUtil.scala index 46218ee..0145db4 100644 --- a/src/main/scala/util/FileUtil.scala +++ b/src/main/scala/util/FileUtil.scala @@ -5,13 +5,9 @@ import java.io.File import util.ControlUtil._ import scala.util.Random -import eu.medsea.mimeutil.{MimeUtil2, MimeType} object FileUtil { - private val mimeUtil = new MimeUtil2() - mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector") - def getMimeType(name: String): String = defining(URLConnection.getFileNameMap()){ fileNameMap => fileNameMap.getContentTypeFor(name) match { @@ -20,16 +16,6 @@ } } - /** - * Returns mime type detected by file content. - * - * @param file File object - * @return mime type String - */ - def getMimeType(file: File): String = { - MimeUtil2.getMostSpecificMimeType(mimeUtil.getMimeTypes(file, new MimeType("application/octet-stream"))).toString - } - def getContentType(name: String, bytes: Array[Byte]): String = { defining(getMimeType(name)){ mimeType => if(mimeType == "application/octet-stream" && isText(bytes)){