From 98fc64deaa92f2d8c2a28b8abe2ee267de961bf7 Mon Sep 17 00:00:00 2001 From: Yota Ichino Date: Mon, 12 Oct 2015 20:51:06 +0900 Subject: [PATCH 1/6] Enable to upload a PDF file --- .../core/controller/FileUploadController.scala | 12 ++++++------ src/main/scala/gitbucket/core/util/FileUtil.scala | 6 ++++++ .../twirl/gitbucket/core/helper/attached.scala.html | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/FileUploadController.scala b/src/main/scala/gitbucket/core/controller/FileUploadController.scala index c3503ac7c..8b118d87e 100644 --- a/src/main/scala/gitbucket/core/controller/FileUploadController.scala +++ b/src/main/scala/gitbucket/core/controller/FileUploadController.scala @@ -17,22 +17,22 @@ class FileUploadController extends ScalatraServlet with FileUploadSupport { configureMultipartHandling(MultipartConfig(maxFileSize = Some(3 * 1024 * 1024))) post("/image"){ - execute { (file, fileId) => + execute({ (file, fileId) => FileUtils.writeByteArrayToFile(new java.io.File(getTemporaryDir(session.getId), fileId), file.get) session += Keys.Session.Upload(fileId) -> file.name - } + }, FileUtil.isImage) } post("/image/:owner/:repository"){ - execute { (file, fileId) => + execute({ (file, fileId) => FileUtils.writeByteArrayToFile(new java.io.File( getAttachedDir(params("owner"), params("repository")), fileId + "." + FileUtil.getExtension(file.getName)), file.get) - } + }, FileUtil.isUploadableType) } - private def execute(f: (FileItem, String) => Unit) = fileParams.get("file") match { - case Some(file) if(FileUtil.isImage(file.name)) => + private def execute(f: (FileItem, String) => Unit, mimeTypeChcker: (String) => Boolean) = fileParams.get("file") match { + case Some(file) if(mimeTypeChcker(file.name)) => defining(FileUtil.generateFileId){ fileId => f(file, fileId) diff --git a/src/main/scala/gitbucket/core/util/FileUtil.scala b/src/main/scala/gitbucket/core/util/FileUtil.scala index d3428fb53..8dd8aaeef 100644 --- a/src/main/scala/gitbucket/core/util/FileUtil.scala +++ b/src/main/scala/gitbucket/core/util/FileUtil.scala @@ -28,6 +28,12 @@ object FileUtil { def isImage(name: String): Boolean = getMimeType(name).startsWith("image/") + def isUploadableType(name: String): Boolean = getMimeType(name) match { + case t if t.startsWith("image/") => true + case "application/pdf" => true + case _ => false + } + def isLarge(size: Long): Boolean = (size > 1024 * 1000) def isText(content: Array[Byte]): Boolean = !content.contains(0) diff --git a/src/main/twirl/gitbucket/core/helper/attached.scala.html b/src/main/twirl/gitbucket/core/helper/attached.scala.html index 33bd58e65..7bb4726ed 100644 --- a/src/main/twirl/gitbucket/core/helper/attached.scala.html +++ b/src/main/twirl/gitbucket/core/helper/attached.scala.html @@ -11,7 +11,7 @@ $(function(){ $([$('#@textareaId').closest('div')[0], $('#@textareaId').next('div')[0]]).dropzone({ url: '@path/upload/image/@owner/@repository', maxFilesize: 10, - acceptedFiles: 'image/*', + acceptedFiles: 'image/*,application/pdf', dictInvalidFileType: 'Unfortunately, we don\'t support that file type. Try again with a PNG, GIF, or JPG.', previewTemplate: "
\n
Uploading your images...
\n
\n
", success: function(file, id) { From 6accdefb8cdf1750769540257b23a253dee5b26a Mon Sep 17 00:00:00 2001 From: Yota Ichino Date: Mon, 12 Oct 2015 20:56:39 +0900 Subject: [PATCH 2/6] Change a path for uploading a file --- .../scala/gitbucket/core/controller/FileUploadController.scala | 2 +- src/main/twirl/gitbucket/core/helper/attached.scala.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/FileUploadController.scala b/src/main/scala/gitbucket/core/controller/FileUploadController.scala index 8b118d87e..d6213a23c 100644 --- a/src/main/scala/gitbucket/core/controller/FileUploadController.scala +++ b/src/main/scala/gitbucket/core/controller/FileUploadController.scala @@ -23,7 +23,7 @@ class FileUploadController extends ScalatraServlet with FileUploadSupport { }, FileUtil.isImage) } - post("/image/:owner/:repository"){ + post("/file/:owner/:repository"){ execute({ (file, fileId) => FileUtils.writeByteArrayToFile(new java.io.File( getAttachedDir(params("owner"), params("repository")), diff --git a/src/main/twirl/gitbucket/core/helper/attached.scala.html b/src/main/twirl/gitbucket/core/helper/attached.scala.html index 7bb4726ed..ad7d83818 100644 --- a/src/main/twirl/gitbucket/core/helper/attached.scala.html +++ b/src/main/twirl/gitbucket/core/helper/attached.scala.html @@ -9,7 +9,7 @@ $(function(){ try { $([$('#@textareaId').closest('div')[0], $('#@textareaId').next('div')[0]]).dropzone({ - url: '@path/upload/image/@owner/@repository', + url: '@path/upload/file/@owner/@repository', maxFilesize: 10, acceptedFiles: 'image/*,application/pdf', dictInvalidFileType: 'Unfortunately, we don\'t support that file type. Try again with a PNG, GIF, or JPG.', From 99d23398adb1cdca0e99f6f7d9d2b7d8fa9ef966 Mon Sep 17 00:00:00 2001 From: Yota Ichino Date: Mon, 12 Oct 2015 21:40:33 +0900 Subject: [PATCH 3/6] Change the upload form for PDF files --- src/main/twirl/gitbucket/core/helper/attached.scala.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/twirl/gitbucket/core/helper/attached.scala.html b/src/main/twirl/gitbucket/core/helper/attached.scala.html index ad7d83818..94b5af848 100644 --- a/src/main/twirl/gitbucket/core/helper/attached.scala.html +++ b/src/main/twirl/gitbucket/core/helper/attached.scala.html @@ -2,7 +2,7 @@ @import context._
@textarea -
Attach images by dragging & dropping, or selecting them.
+
Attach images or PDF files by dragging & dropping, or selecting them.
@defining("(id=\")([\\w\\-]*)(\")".r.findFirstMatchIn(textarea.body).map(_.group(2))){ textareaId =>