diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 61bd52f..2e60168 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -275,7 +275,10 @@ get("/:owner/:repository/_attached/:file")(referrersOnly { repository => defining(new java.io.File(Directory.getAttachedDir(repository.owner, repository.name), params("file"))){ file => - if(file.exists) file else NotFound + if(file.exists) { + contentType = FileUtil.getMimeType(file) + file + } else NotFound } }) diff --git a/src/main/scala/util/FileUtil.scala b/src/main/scala/util/FileUtil.scala index 0145db4..46218ee 100644 --- a/src/main/scala/util/FileUtil.scala +++ b/src/main/scala/util/FileUtil.scala @@ -5,9 +5,13 @@ 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 { @@ -16,6 +20,16 @@ } } + /** + * 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)){ diff --git a/src/main/scala/view/Markdown.scala b/src/main/scala/view/Markdown.scala index 4d998bd..242b6e5 100644 --- a/src/main/scala/view/Markdown.scala +++ b/src/main/scala/view/Markdown.scala @@ -89,7 +89,8 @@ ) with LinkConverter with RequestCache { override protected def printImageTag(imageNode: SuperNode, url: String): Unit = - printer.print("\"").printEncoded(printChildrenToString(imageNode)).print("\"/") + printer.print("") + .print("\"").printEncoded(printChildrenToString(imageNode)).print("\"/") override protected def printLink(rendering: LinkRenderer.Rendering): Unit = { printer.print('<').print('a')