mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-09 06:55:54 +01:00
Migrate: add extension to files which are attached to issue
This commit is contained in:
@@ -25,7 +25,9 @@ class FileUploadController extends ScalatraServlet with FileUploadSupport {
|
|||||||
|
|
||||||
post("/image/:owner/:repository"){
|
post("/image/:owner/:repository"){
|
||||||
execute { (file, fileId) =>
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -274,12 +274,14 @@ trait IssuesControllerBase extends ControllerBase {
|
|||||||
})
|
})
|
||||||
|
|
||||||
get("/:owner/:repository/_attached/:file")(referrersOnly { repository =>
|
get("/:owner/:repository/_attached/:file")(referrersOnly { repository =>
|
||||||
defining(new java.io.File(Directory.getAttachedDir(repository.owner, repository.name), params("file"))){ file =>
|
(Directory.getAttachedDir(repository.owner, repository.name) match {
|
||||||
if(file.exists) {
|
case dir if(dir.exists && dir.isDirectory) =>
|
||||||
contentType = FileUtil.getMimeType(file)
|
dir.listFiles.find(_.getName.startsWith(params("file") + ".")).map { file =>
|
||||||
file
|
contentType = FileUtil.getMimeType(file.getName)
|
||||||
} else NotFound
|
file
|
||||||
}
|
}
|
||||||
|
case _ => None
|
||||||
|
}) getOrElse NotFound
|
||||||
})
|
})
|
||||||
|
|
||||||
val assignedUserName = (key: String) => params.get(key) filter (_.trim != "")
|
val assignedUserName = (key: String) => params.get(key) filter (_.trim != "")
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory
|
|||||||
import util.Directory._
|
import util.Directory._
|
||||||
import util.ControlUtil._
|
import util.ControlUtil._
|
||||||
import org.eclipse.jgit.api.Git
|
import org.eclipse.jgit.api.Git
|
||||||
|
import util.Directory
|
||||||
|
|
||||||
object AutoUpdate {
|
object AutoUpdate {
|
||||||
|
|
||||||
@@ -50,6 +51,32 @@ object AutoUpdate {
|
|||||||
* The history of versions. A head of this sequence is the current BitBucket version.
|
* The history of versions. A head of this sequence is the current BitBucket version.
|
||||||
*/
|
*/
|
||||||
val versions = Seq(
|
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, 13),
|
||||||
Version(1, 12),
|
Version(1, 12),
|
||||||
Version(1, 11),
|
Version(1, 11),
|
||||||
|
|||||||
@@ -5,13 +5,9 @@ import java.net.URLConnection
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import util.ControlUtil._
|
import util.ControlUtil._
|
||||||
import scala.util.Random
|
import scala.util.Random
|
||||||
import eu.medsea.mimeutil.{MimeUtil2, MimeType}
|
|
||||||
|
|
||||||
object FileUtil {
|
object FileUtil {
|
||||||
|
|
||||||
private val mimeUtil = new MimeUtil2()
|
|
||||||
mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector")
|
|
||||||
|
|
||||||
def getMimeType(name: String): String =
|
def getMimeType(name: String): String =
|
||||||
defining(URLConnection.getFileNameMap()){ fileNameMap =>
|
defining(URLConnection.getFileNameMap()){ fileNameMap =>
|
||||||
fileNameMap.getContentTypeFor(name) match {
|
fileNameMap.getContentTypeFor(name) match {
|
||||||
@@ -20,16 +16,6 @@ object FileUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 = {
|
def getContentType(name: String, bytes: Array[Byte]): String = {
|
||||||
defining(getMimeType(name)){ mimeType =>
|
defining(getMimeType(name)){ mimeType =>
|
||||||
if(mimeType == "application/octet-stream" && isText(bytes)){
|
if(mimeType == "application/octet-stream" && isText(bytes)){
|
||||||
|
|||||||
Reference in New Issue
Block a user