hw : Notice & Reply, Board & Reply + IMAGE
AWS Image Upload
Basic Configuration
build.gradle
// aws s3
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.716'
application.properties
# aws
cloud.aws.s3.endpoint=https://hisinstitute.s3.ap-northeast-2.amazonaws.com
S3Config.java
package com.example.adminproject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
@Configuration
public class S3Config {
@Value("YOURS")
private String awsAccessKey;
@Value("YOURS")
private String awsSecretKey;
@Value("YOURS")
private String region;
@Bean
public AmazonS3 s3client() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsAccessKey,awsSecretKey);
return AmazonS3ClientBuilder.standard()
.withRegion(Regions.fromName(region))
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
}
}
S3Service
package com.example.adminproject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.PutObjectRequest;
@Service
public class S3Service {
@Autowired
private AmazonS3 amazonS3;
@Value("YOURS")
private String bucketName;
public void uploadFile(MultipartFile multipartFile, String filename) throws IOException {
File file = new File(multipartFile.getOriginalFilename());
try (FileOutputStream fos = new FileOutputStream(file)){
fos.write(multipartFile.getBytes());
}
amazonS3.putObject(new PutObjectRequest(bucketName, filename, file));
file.delete();
}
}
Create.html
<form class="mb-9" action="/product/create" method="post" enctype="multipart/form-data">
<input name="image" type="file" />
Controller.java
@PostMapping("/create")
public String create(Product product,
@RequestParam("image") MultipartFile file
) {
productService.create(product, file);
return "redirect:/product/readlist";
}
Service.java
@Override
public void create(Product product, MultipartFile file) {
UUID uuid = UUID.randomUUID();
String fileName = uuid + "_" + file.getOriginalFilename();
try {
s3Service.uploadFile(file, fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
product.setPimg(fileName);
product.setPdate(LocalDateTime.now());
productRepository.save(product);
}
View
@Value("${cloud.aws.s3.endpoint}")
private String path;
@GetMapping("/readdetail/{pid}")
public String readdetail(@PathVariable ("pid") Integer pid, Model model) {
model.addAttribute("product", productService.readdetail(pid));
model.addAttribute("path", path);
return "product/readdetail";
}
readdetail.html
<img th:src="@{|${path}/${product.pimg}|}">