src/main/scala/s3/website/S3.scala in s3_website-2.8.6 vs src/main/scala/s3/website/S3.scala in s3_website-2.9.0

- old
+ new

@@ -59,28 +59,34 @@ } recoverWith retry(a)( createFailureReport = error => FailedDelete(s3Key, error), retryAction = newAttempt => this.delete(s3Key, newAttempt) ) - def toPutObjectRequest(source: Either[Upload, Redirect])(implicit config: Config): Try[PutObjectRequest] = + def toPutObjectRequest(source: Either[Upload, Redirect])(implicit config: Config, logger: Logger): Try[PutObjectRequest] = source.fold( upload => for { uploadFile <- upload.uploadFile contentType <- upload.contentType } yield { val md = new ObjectMetadata() md setContentLength uploadFile.length md setContentType contentType upload.encodingOnS3.map(_ => "gzip") foreach md.setContentEncoding - upload.maxAge foreach { seconds => - md.setCacheControl( - if (seconds == 0) - s"no-cache; max-age=$seconds" - else - s"max-age=$seconds" - ) + val cacheControl: Option[String] = (upload.maxAge, config.cache_control) match { + case (maxAge: Some[Int], cacheCtrl: Some[String]) => + logger.warn("Overriding the max_age setting with the cache_control setting") + cacheCtrl + case (_, cacheCtrl: Some[String]) => + cacheCtrl + case (maxAgeSeconds: Some[int], None) => + maxAgeSeconds.map({ + case seconds if seconds == 0 => s"no-cache; max-age=0" + case seconds => s"max-age=$seconds" + }) + case (None, None) => None } + cacheControl foreach { md.setCacheControl } val req = new PutObjectRequest(config.s3_bucket, upload.s3Key, new FileInputStream(uploadFile), md) config.s3_reduced_redundancy.filter(_ == true) foreach (_ => req setStorageClass ReducedRedundancy) req } ,