Migrate: add extension to files which are attached to issue

This commit is contained in:
takezoe
2014-05-04 18:45:58 +09:00
parent 896420f8dc
commit cf047a8cee
4 changed files with 38 additions and 21 deletions

View File

@@ -25,7 +25,9 @@ class FileUploadController extends ScalatraServlet with FileUploadSupport {
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)
}
}

View File

@@ -274,12 +274,14 @@ trait IssuesControllerBase extends ControllerBase {
})
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 != "")

View File

@@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory
import util.Directory._
import util.ControlUtil._
import org.eclipse.jgit.api.Git
import util.Directory
object AutoUpdate {
@@ -50,6 +51,32 @@ object AutoUpdate {
* 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),

View File

@@ -5,13 +5,9 @@ import java.net.URLConnection
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 @@ 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 = {
defining(getMimeType(name)){ mimeType =>
if(mimeType == "application/octet-stream" && isText(bytes)){