11package io .findify .s3mock .provider
22import java .util .UUID
3- import java .io .{File => JFile }
3+ import java .io .{FileInputStream , File => JFile }
44
55import akka .http .scaladsl .model .DateTime
66import better .files .File
@@ -11,6 +11,7 @@ import io.findify.s3mock.error.{NoSuchBucketException, NoSuchKeyException}
1111import io .findify .s3mock .provider .metadata .{MapMetadataStore , MetadataStore }
1212import io .findify .s3mock .request .{CompleteMultipartUpload , CreateBucketConfiguration }
1313import io .findify .s3mock .response ._
14+ import org .apache .commons .codec .digest .DigestUtils
1415
1516import scala .util .Random
1617
@@ -46,7 +47,11 @@ class FileProvider(dir:String) extends Provider with LazyLogging {
4647 val fString = fromOs(f.toString).drop(bucketFileString.length).dropWhile(_ == '/' )
4748 fString.startsWith(prefixNoLeadingSlash) && ! f.isDirectory
4849 })
49- val files = bucketFiles.map(f => {Content (fromOs(f.toString).drop(bucketFileString.length+ 1 ).dropWhile(_ == '/' ), DateTime (f.lastModifiedTime.toEpochMilli), " 0" , f.size, " STANDARD" )}).toList
50+ val files = bucketFiles.map(f => {
51+ val stream = new FileInputStream (f.toJava)
52+ val md5 = DigestUtils .md5Hex(stream)
53+ Content (fromOs(f.toString).drop(bucketFileString.length+ 1 ).dropWhile(_ == '/' ), DateTime (f.lastModifiedTime.toEpochMilli), md5, f.size, " STANDARD" )
54+ }).toList
5055 logger.debug(s " listing bucket contents: ${files.map(_.key)}" )
5156 val commonPrefixes = delimiter match {
5257 case Some (del) => files.flatMap(f => commonPrefix(f.key, prefixNoLeadingSlash, del)).distinct.sorted
@@ -71,6 +76,7 @@ class FileProvider(dir:String) extends Provider with LazyLogging {
7176 file.createIfNotExists(createParents = true )
7277 logger.debug(s " writing file for s3:// $bucket/ $key to $dir/ $bucket/ $key, bytes = ${data.length}" )
7378 file.writeByteArray(data)(OpenOptions .default)
79+ objectMetadata.setLastModified(org.joda.time.DateTime .now().toDate)
7480 metadataStore.put(bucket, key, objectMetadata)
7581 }
7682 override def getObject (bucket: String , key: String ): GetObjectData = {
0 commit comments