· 6 years ago · Mar 26, 2019, 10:30 AM
1@Service
2class AmazonClient {
3 lateinit var s3client: AmazonS3
4
5 @Value("\${amazonProperties.endpointUrl}")
6 private val endpointUrl: String? = null
7
8 @Value("\${amazonProperties.bucketName}")
9 private val bucketName: String? = null
10
11 @Value("\${amazonProperties.accessKey}")
12 private val accessKey: String? = null
13
14 @Value("\${amazonProperties.secretKey}")
15 private val secretKey: String? = null
16
17 @PostConstruct
18 private fun initializeAmazon() {
19 val credentials = BasicAWSCredentials(this.accessKey!!, this.secretKey!!)
20 this.s3client = AmazonS3ClientBuilder.standard()
21 .withCredentials(AWSStaticCredentialsProvider(credentials))
22 .withRegion(Regions.AP_SOUTHEAST_1)
23 .build()
24 }
25
26 @Throws(IOException::class)
27 private fun convertMultiPartToFile(file: MultipartFile): File {
28 val convFile = File(file.originalFilename!!)
29 val fos = FileOutputStream(convFile)
30 fos.write(file.bytes)
31 fos.close()
32 return convFile
33 }
34
35 private fun generateFileName(multiPart: MultipartFile): String {
36 return Date().time.toString() + "-" + multiPart.originalFilename!!.replace(" ", "_")
37 }
38
39 private fun uploadFileTos3bucket(fileName: String, file: File) {
40 s3client.putObject(PutObjectRequest(bucketName, fileName, file)
41 .withCannedAcl(CannedAccessControlList.PublicRead))
42 }
43
44 fun uploadFile(multipartFile: MultipartFile): String {
45
46 var fileUrl = ""
47 try {
48 val file = convertMultiPartToFile(multipartFile)
49 val fileName = generateFileName(multipartFile)
50 fileUrl = "$endpointUrl/$bucketName/$fileName"
51 uploadFileTos3bucket(fileName, file)
52 file.delete()
53 } catch (e: Exception) {
54 e.printStackTrace()
55 }
56
57 return fileUrl
58 }
59
60 fun deleteFileFromS3Bucket(fileUrl: String): String {
61 val fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1)
62 s3client.deleteObject(DeleteObjectRequest(bucketName!! + "/", fileName))
63 return "Successfully deleted"
64 }
65}