Skip to content

Commit 42114ba

Browse files
Specify charset=utf-8 for all text docs
1 parent fb538e4 commit 42114ba

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/main/scala/s3/website/model/push.scala

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ object LocalFile {
9696
contentEncoding = localFile.encodingOnS3.map(_ => "gzip"),
9797
contentLength = sourceFile.length(),
9898
maxAge = maxAge,
99-
contentType = tika.detect(localFile.sourceFile),
99+
contentType = resolveContentType(localFile.sourceFile),
100100
openInputStream = () => new FileInputStream(sourceFile)
101101
)
102102
)
@@ -108,6 +108,14 @@ object LocalFile {
108108

109109
lazy val tika = new Tika()
110110

111+
def resolveContentType(file: File) = {
112+
val mimeType = tika.detect(file)
113+
if (mimeType.startsWith("text/") || mimeType == "application/json")
114+
mimeType + "; charset=utf-8"
115+
else
116+
mimeType
117+
}
118+
111119
def resolveLocalFiles(implicit site: Site): Either[ErrorReport, Seq[LocalFile]] = Try {
112120
val files = recursiveListFiles(new File(site.rootDirectory)).filterNot(_.isDirectory)
113121
files map { file =>

src/test/scala/s3/website/S3WebsiteSpec.scala

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,26 @@ class S3WebsiteSpec extends Specification {
379379
sentPutObjectRequest.getKey must equalTo(".vimrc")
380380
}
381381
}
382+
383+
"content type inference" should {
384+
"add charset=utf-8 to all html documents" in new SiteDirectory with MockAWS {
385+
implicit val site = siteWithFiles(localFiles = "file.html" :: Nil)
386+
Push.pushSite
387+
sentPutObjectRequest.getMetadata.getContentType must equalTo("text/html; charset=utf-8")
388+
}
389+
390+
"add charset=utf-8 to all text documents" in new SiteDirectory with MockAWS {
391+
implicit val site = siteWithFiles(localFiles = "file.txt" :: Nil)
392+
Push.pushSite
393+
sentPutObjectRequest.getMetadata.getContentType must equalTo("text/plain; charset=utf-8")
394+
}
395+
396+
"add charset=utf-8 to all json documents" in new SiteDirectory with MockAWS {
397+
implicit val site = siteWithFiles(localFiles = "file.json" :: Nil)
398+
Push.pushSite
399+
sentPutObjectRequest.getMetadata.getContentType must equalTo("application/json; charset=utf-8")
400+
}
401+
}
382402

383403
trait MockAWS extends MockS3 with MockCloudFront with Scope
384404

0 commit comments

Comments
 (0)